用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* 
>