这道题除了注意一下输出时候的格式,别的也没什么难的了。
输出格式注意 : 每输出一次波就要换行,最后输出的末尾也只有一个换行,而不是两个换行。
先讲一下如何输出波。
首先看波的上半部分 :
1
22
333
我们可以发现,第 i i i 行输出 i i i 次的 i i i,就比如说第一行输出一次的 1 1 1,第二行输出两次的 2 2 2,以此类推到第 x x x 行。
再看波的下半部分 :
22
1
然后我们可以发现,波的下半部分其实就是将 1 1 1 至 x − 1 x - 1 x−1 行倒着输出。
下面给出本题的参考代码 :
#include <iostream>
#include <cstdio>
using namespace std;
int t, n, k;
void printed(int x, int y)
{
while(y --)
{//将波分成两个部分输出.
for(register int i = 1; i <= x; i ++)//波的上半部分 , 输出第 1 行至第 x 行.
{
for(register int j = 1; j <= i; j ++) printf("%d", i);
printf("\n");
}
for(register int i = x - 1; i >= 1; i --)//波的下半部分 , 输出第 x + 1 行至第 2x 行.
{
for(register int j = 1; j <= i; j ++) printf("%d", i);
printf("\n");
}
if(y != 0 || t != 0) printf("\n");//如果没有这个前提条件 , 最后输出的末尾就会换行2次.
}
}
int main()
{
scanf("%d\n", &t);
while(t --)
{
scanf("%d\n%d\n", &n, &k);
printed(n, k);
}
return 0;
}