【基础练习】金字塔图案
金字塔图案
https://www.nowcoder.com/practice/e17b8a3b71f647f0927d2287332eaaa7?tdsourcetag=s_pcqq_aiomsg
金字塔图案
https://www.nowcoder.com/practice/e17b8a3b71f647f0927d2287332eaaa7?tdsourcetag=s_pcqq_aiomsg
一.解法一(While循环)
1、分析
本题考察的是熟练运用循环打印“* ”,组成金字塔。
关键点就是如何选取循环的变量。
首先定义i为要输入的变量,即为金字塔边长和总行数。
在函数print中的第一个while循环变量就是i,while(i),打印i行,接下来就是打印的内容了。
首先使用了setw(n)打印每行的第一个“*”的位置。
定义了j=i,k=j-i,因为i在第一层的while循环里面递减,所以k就是每行*的个数,while(k)打印每行。
在main函数里面通过while(cin>>i)实现多组输入。
2、代码
#include<iostream>
#include<iomanip>//setw
#include<string>
using namespace std;
void print(int i)
{
int j = i;
while (i)//i!=0就一直循环
{
int k = j - i;
cout << setw(i+1) << "* ";//第一个*的位置,并打印出来
while(k)//k为每行剩余*的个数
{
cout <<"* ";//打印出来
--k;
}
cout << endl;//换行
--i;//递减i,一共i行
}
}
int main()
{
int i;
while(cin>>i)//通过while实现循环输入
print(i);
}二.解法二(for循环)
1、分析
for和while的不同就是循环条件写的方式不一样。
2、代码
#include<iostream>
#include<iomanip>//setw
#include<string>
using namespace std;
void print(int i)
{
int j = i;
for(i;i!=0;--i)//i!=0就一直循环
{
int k = j - i;
cout << setw(i+1) << "* ";//第一个*的位置,并打印出来
for(k;k!=0;--k)//k为每行剩余*的个数
{
cout <<"* ";//打印出来
}
cout << endl;//换行
}
}
int main()
{
int i;
while(cin>>i)//通过while实现循环输入
print(i);
}三、总结
复杂度都是O(i2)
