2016-10-10 70 views
-1

這是我試過的代碼,它只是生成數字和打印。我完全不知道如何訪問行號並交換矩陣行的打印位置。C程序生成此模式

#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

+1

直到您可以使用文本編輯器並將需求作爲問題的一部分發布之後,您纔會走得更遠。 –

+1

在C中,數組索引從'0'開始計數,而不是'1'。 –

+2

相關,我會從C:零基數組索引中的最基本的東西開始。直到你接受這一點,你的生活纔會坦白地說,*用這種語言吸引*。而且,你可能不需要一個數組,更不用說數組,更不用說做這個任務。如果是我,我會使用一個*調試器*並且一次爲程序設置一個動畫語句,以查看出錯的地方,只有*我的算法似乎可以在紙上工作。 – WhozCraig

回答

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

這些都是該程序的用於diferent輸入的輸出:

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