用C语言编写程序来生成此模式
这是我尝试过的代码,它只生成数字和打印。我完全被困在如何访问行号和交换矩阵行的打印位置的问题上用C语言编写程序来生成此模式,c,matrix,pattern-matching,C,Matrix,Pattern Matching,这是我尝试过的代码,它只生成数字和打印。我完全被困在如何访问行号和交换矩阵行的打印位置的问题上 #include <stdio.h> int main(void) { int i,a[10][10],j,n,count=1; scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { a[i][j]=count;
#include <stdio.h>
int main(void)
{
int i,a[10][10],j,n,count=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
a[i][j]=count;
printf("%d\t",count++);
}
printf("\n");
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d*\t",a[i][j]);
printf("\n");
}
return 0;
}
#包括
内部主(空)
{
int i,a[10][10],j,n,count=1;
scanf(“%d”和“&n”);
对于(i=1;i这是我对问题的解决方案:
#include <stdio.h>
int main() {
int input = 0;
int i = 0;
int j = 0;
int k = 1;
scanf("%d", &input);
int array[input][input];
for(i = 0; i < (input/2); i++) {
for(j = 0; j < input; j++) {
array[i][j] = k;
k++;
}
for(j = 0; j < input; j++) {
array[input-1-i][j] = k;
k++;
}
}
if((input % 2) == 1) {
for(j = 0; j < input; j++) {
array[input/2][j] = k;
k++;
}
}
for(i = 0; i < input; i++) {
for(j = 0; j < input; j++) {
printf("\t%d", array[i][j]);
}
printf("\n");
}
return 0;
}
我的方法是完全避免矩阵:
#include <stdio.h>
int main() {
int number;
(void) scanf("%d", &number);
int twice = 2 * number;
int squared = number * number;
for (int row = 0, upward = number, downward = 2 * squared; row < number; row++) {
int n = ((upward > squared) ? downward : upward) - number + 1;
for (int column = 0; column < number; column++) {
printf("%d*\t", n++);
}
printf("\n");
upward += twice;
downward -= twice;
}
return 0;
}
在使用文本编辑器并将需求作为问题的一部分发布之前,您不会走多远。在C中,数组索引从0
开始计数,而不是1
。与此相关,我将从C中最基本的事情开始:基于零的数组索引。在您接受这一点之前,坦率地说,您的生活将在这种语言中变得糟糕yi,无论如何,你可能不需要数组,更不用说数组数组来完成这项任务。如果是我,我会使用调试器,一次一条语句地对程序进行动画处理,直到我的算法在纸上运行之后,才能看到哪里出了问题。是的,我知道索引是从0开始的,我更专注于模式。我通常使用0。感谢t他建议“哇
2
1 2
3 4
3
1 2 3
7 8 9
4 5 6
4
1 2 3 4
9 10 11 12
13 14 15 16
5 6 7 8
5
1 2 3 4 5
11 12 13 14 15
21 22 23 24 25
16 17 18 19 20
6 7 8 9 10
#include <stdio.h>
int main() {
int number;
(void) scanf("%d", &number);
int twice = 2 * number;
int squared = number * number;
for (int row = 0, upward = number, downward = 2 * squared; row < number; row++) {
int n = ((upward > squared) ? downward : upward) - number + 1;
for (int column = 0; column < number; column++) {
printf("%d*\t", n++);
}
printf("\n");
upward += twice;
downward -= twice;
}
return 0;
}
> ./a.out
3
1* 2* 3*
7* 8* 9*
4* 5* 6*
> ./a.out
4
1* 2* 3* 4*
9* 10* 11* 12*
13* 14* 15* 16*
5* 6* 7* 8*
> ./a.out
5
1* 2* 3* 4* 5*
11* 12* 13* 14* 15*
21* 22* 23* 24* 25*
16* 17* 18* 19* 20*
6* 7* 8* 9* 10*
>