在C中编程以生成此模式

时间:2016-10-10 19:57:14

标签: 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;
            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;
}

我提供了要打印的图案的链接,请检查。

https://drive.google.com/open?id=1DKwW8dQggzNjjtAxwPTEI3nRS9AmpK-2Zw

2 个答案:

答案 0 :(得分:1)

我的方法是完全避免矩阵:

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

答案 1 :(得分:0)

这是我解决问题的方法:

#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;
}

这些是不同输入程序的输出:

1
    1
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