- zouyc 的博客
嵌套循环、图形输出
- @ 2025-6-13 11:16:37
什么是嵌套循环
循环语句之中还有循环语句,做嵌套循环。 左下三角形图案
左上三角形图案
右上三角形图案
右下三角形图案
金字塔
数字正三角
1. 左下三角形图案
题目:

分析:

题解:

2. 左上三角形图案
题目:

题解:
/*
* v1.0.1
* 思路:
* n 行数
* m *个数
* 记录第一行*个,后面个数减1
* 循环1到n
*/
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
for (int i=0,m=n;i<n;i++,m--) //0~n-1 n行
{
for (int j=0;j<m;j++)
{
cout<<"*";
}
cout<<endl;
}
return 0;
}
3. 右上三角形图案
题目:
输入n,打印如下三角形图案。如下,n=5。

题解:
/*
右上角直角三角形
5
*****
****
***
**
*
分析:列表分析法
行号 空格数 *数
------------------
1 0 5
2 1 4
3 2 3
4 3 2
5 4 1
...
i ? ?
空格数 + *数 = n
只要算出空格数或*数之一,另一个即可导出
现在算空格数
试探法:空格数=i-1
等差数列法:Ai=A1+(i-1)*d
=0+(i-1)*1
=i-1
i i-1 n-(i-1)=n-i+1
*/
#include <iostream>
using namespace std;
int main() {
int n;
cin>>n;
for (int i=1;i<=n;i++) { //行数
for (int j=0;j<i-1;j++) //空格数
cout<<" ";
for (int j=0;j<n-i+1;j++)//*数
cout<<"*";
cout<<endl;
}
return 0;
}
4. 右下三角形图案
题目:
输入n,输出右下三角形图案。如下:n=5。

题解:
/*
右下角直角三角行
5
*
**
***
****
*****
分析:列表分析法
行号 空格数 *数
----------------
1 4 1
2 3 2
3 2 3
4 1 4
5 0 5
i ? ?
空格数 + *数 = n
所以,算容易计算的,显然*数容易算
开始算...
i ? i
i n-i i
*/
#include <iostream>
using namespace std;
int main() {
int n;
cin>>n;
for (int i=1;i<=n;i++) { //行数
for (int j=0;j<n-i;j++) //空格数
cout<<" ";
for (int j=0;j<i;j++) //*数
cout<<"*";
cout<<endl; //换行
}
return 0;
}
12. 金字塔
题目:

题解:
/*
5
/\
/__\
/____\
/______\
/________\
分析:/、\各有1个,不列出
行号 空格数 _个数
--------------------
1 4 0
2 3 2
3 2 4
4 1 6
5 0 8
...
i 等差 等差
数列 数列
d=-1 d=2
-------------------- 套公式:a1+(i-1)*d
4+(i-1)*(-1) 0+(i-1)*(2)
= 5-i =2i-2
= n-i
此例n=5
*/
#include <iostream>
using namespace std;
int main() {
int n;
cin>>n; //行数
for (int i=1;i<=n;i++) { //行号
//每行由以下四个任务
for (int j=1;j<=n-i;j++) { //任务1 每行空格数,来自上述推导
printf(" ");
}
printf("/"); //任务2 左边是/
for (int k=1;k<=2*i-2;k++) {//下滑线数量,来自上述推导
printf("_");
}
printf("\\"); //任务3 右边\,必须转义字符
printf("\n"); //任务4 换行
}
return 0;
}
数字正三角
题目:

题解:
/*
字符图形-数字正三角(3)
4444444
33333
222
1
分析:行数就是n
行数 空格数 数字数
1 0 7
2 1 5
3 2 3
4 3 1
规律查找:可以用试探法,或者等差数列法
试探法 i-1 ?不好看出来,就用等差数列法,套公式算
等差数列法 1+(t-1)*2
=2t-1 (倒序看)
这里t是倒数的次序
倒数 正数
1 n
2 n-1
3 n-2
...
t n-i+1
所以,把t用 n-i+1 替换
2t-1 = 2(n-i+1)-1 = 2(n-i)+1
*/
#include <iostream>
using namespace std;
int main() {
int n;
cin>>n;
int num=n+1;
for (int i=1;i<=n;i++) {
for (int j=1;j<=i-1;j++)
cout<<" ";
num--;
for (int k=1;k<=2*(n-i)+1;k++)
cout<<num;
cout<<endl;
}
return 0;
}
小结:图形输出题型解题方法
- 列出行号、空格数、字符数\
- 分析空格数、字符数和行号的规律,有两种分析方法:
- 方法一:试探法\
- 方法二:等差数列法