我写了一个函数来打印下面的模式。 例如,如果n值为 4 ,则模式为
1
2 7
3 6 8
4 5 9 10
或者,如果n的值 5 ,则模式为
1
2 9
3 8 10
4 7 11 14
5 6 12 13 15
我的功能给了我前两个块但不是下一个块。我被困在这里很久了!
我的功能是
int printPattern(int n) {
int row, column, fwdCtr = 1, evenCtr = 0, ctr = n;
for(row = 1; row <= n; row++) {
fwdCtr = row;
for(column = 1; column <= row; column++) {
if(column % 2 != 0) {
printf("%d ", fwdCtr++);
} else {
evenCtr = fwdCtr + ctr;
printf("%d ", evenCtr);
ctr = ctr - 2;
}
}
printf("\n");
}
}
我得到的是
1
2 7
3 6 4
4 5 5 4
请提出改变建议!
答案 0 :(得分:2)
以下代码应该这样做:
#include <stdio.h>
void f(int n)
{
for (int i = 0; i < n; ++i)
{
for (int j=0; j<=i; ++j)
{
// Calculate the numbers used so far by previous columns
int x = 0;
for(int v=0; v<j;++v)
{
x = x + (n-v);
}
if ((j % 2) == 0)
{
// even columns
printf("%d ", x+i-j+1);
}
else
{
// odd columns
printf("%d ", x+n-i);
}
}
printf("\n");
}
}
int main(void)
{
f(5);
return 0;
}
输出:
1
2 9
3 8 10
4 7 11 14
5 6 12 13 15
答案 1 :(得分:1)
最简单的方法是根据行和列以及n
的值打印正确的数字,就像这样
int main(void)
{
int n = 20;
for (int row = 0; row < n; row++) {
for (int col = 0; col <= row; col++)
printf("%3d ", 1 + col*n - (col-1)*col/2 + (col%2 ? n-1-row : row-col));
printf("\n");
}
}