2016-10-10 2 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: zero. Пока вы не примете это, ваша жизнь будет, честно говоря, * сосать * с этим языком. И fyi, вам может не понадобиться массив, а тем более массив массивов, чтобы выполнить эту задачу в любом случае. Если бы это был я, я бы использовал * отладчик * и анимировал программу за один раз за раз, чтобы увидеть, где все идет не так, только * после того, как мой алгоритм работает на бумаге. – 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* 
>