补充:每行需要加两颗星
这种类型题目难度不大,一般是签到题。
规律总结
- 第一行是h个*;(h+2*0)
- 第二行是h+2个*;(h+2*1)
- …
- 第i行是h+2*(i-1)个*
- 第h行是h+2*(h-1)个*
注意,第h行表示梯形的底边长度,值即为其他行*数和空格数的和
代码
#include <iostream>
int main() {
int h;
scanf("%d",&h);
int bottom = h+2*(h-1);
for (int i = 1; i < h+1; ++i) {
int num_star = h+2*(i-1);
int num_blank = bottom-num_star;
for (int j = 0; j < num_blank; ++j) {
printf(" ");
}
for (int j = 0; j < num_star; ++j) {
printf("*");
}
printf("\n");
}
return 0;
}
不确定数量的输入处理
#include <cstdio>
int main() {
int h;
while(scanf("%d",&h) != EOF){
for (int i = 0; i < h; ++i) {
for (int j = 0; j < 2*h-2-2*i; ++j) {
printf(" ");
}
for (int j = 0; j < h+2*i; ++j) {
printf("*");
}
printf("\n");
}
}
return 0;
}
EOF如果输出,输出的值是-1
本程序在输入ctrl+d(文件终止符)时终止,运行过程是需要先build,然后再debug