【基础练习】金字塔图案

金字塔图案

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)

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务