问题描述

如何输出逐行递增的星号呢 比如第一行一个 第二行两个 等等

以前的写法

用C语言的话 以前我的写法都两层循环 今天发现一个简单的

一行代码解决问题

1
2
3
4
5
6
7
#include <stdio.h>

int main(void)
{
for (int i = 1; i <= 5; printf("%.*s\n", i++, "*****"));
return 0;
}

缺点

这样的缺点很明显 只能在已知个数的情况下才行 如果个数是输入的 这种写法就没有优势了

Python大法好

1
2
for i in xrange(1,6):
print('*'*i)

简单实用啊

C++就有点复杂了

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <iomanip>

using std::cout;
using std::endl;

int main(void)
{
for(size_t i = 1; i != 6; ++i)
cout << std::setfill('*') << std::setw(i + 1) << '\n';

return 0;
}

这里的setfill()setw()合用可以控制填充的字符 算是比C语言高级的地方罢 但感觉麻烦 而且这里有个坑

如果代码里面的\n换成endl什么输出都没有 因为这个时候C++认为你什么都没输出 所以只是个换行 必须是\n才行