如何以下列方式显示5 * 5矩阵的元素?

时间:2014-03-23 06:37:44

标签: c data-structures

我想以下列方式显示5 * 5矩阵的输出:

输入:

1 2 3 4 5
6 7 8 9 0
1 3 5 7 9
2 4 6 8 0
1 4 3 7 0 

输出:

1 2 3 4 5 0 9 0 0 7 3 4 1 2 1 6 7 8 9 7 8 6 4 3 5

我已经编写了以下程序,但我无法获得如上所述的输出。这是什么错误?

#include<stdio.h>
int main()
{ 
    int i, j, m, n, a[5][5];
    scanf("%d%d",  & m,  & n);
    if (m >= 1 && m <= 5 && n >= 1 && n <= 5)
    {
       for (i = 0; i < m; i++)
       {
          for (j = 0; j < n; j++)
          {
             scanf("%d", a[i][j]);
          }
       }
       if (m == 5 && n == 5)
       {
          for (i = 0; i == 0; i++)
          {
             for (j = 0; j < n; j++)
             {
                printf("%d", a[i][j]);
             }
          }
          for (i = 0; i < n; i++)
          {
             for (j = n - 1; j == n - 1; j++)
             {
                printf("%d", a[i][j]);
             }
          }
          for (i = n - 1; i == n - 1; i++)
          {
             for (j = n - 2; j >= 0; j--)
             {
                printf("%d", a[i][j]);
             }
          }
          for (i = n - 2; i >= n - 4; i--)
          {
             for (j = 0; j == 0; j++)
             {
                printf("%d", a[i][j]);
             }
          }
          for (i = n - 4; i == n - 4; i++)
          {
             for (j = n - 4; j <= n - 2; j++)
             {
                printf("%d", a[i][j]);
             }
          }
          for (i = n - 3; i == n - 3; i++)
          {
             for (j = n - 2; j >= n - 4; j--)
             {
                printf("%d", a[i][j]);
             }
          }
       }
    }
    return 0;
}

3 个答案:

答案 0 :(得分:1)

使用

if(m>=1 && m<=5 && n>=1 && n<=5)
    {
    for(i=0;i<m;i++)
    {
    for(j=0;j<n;j++)
    {
    scanf("%d",&a[i][j]);
    }
    }

您将在屏幕上显示输出并使用

printf("%d\t",a[i][j]);

清楚地显示输出 对代码进行此更改,您没有正确循环遍历矩阵,

 #include<stdio.h>
int main()
{ 
int i,j,m,n,a[5][5];
scanf("%d%d",&m,&n);
if(m>=1 && m<=5 && n>=1 && n<=5)
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
if(m==5 && n==5)
{
for(i=0;i==0;i++)
{
for(j=0;j<n;j++)
{ 
printf("%d\t",a[i][j]);
}
}
for(i=1;i<n;i++)
{
for(j=n-1;j==n-1;j++)
{
printf("%d\t",a[i][j]);
}
}
for(i=n-1;i==n-1;i++)
{
for(j=n-2;j>=0;j--)
{
printf("%d\t",a[i][j]);
}
}
for(i=n-2;i>=n-4;i--)
{
for(j=0;j==0;j++)
{
printf("%d\t",a[i][j]);
}
}   
for(i=n-4;i==n-4;i++)
{ 
for(j=n-4;j<=n-2;j++)
{
printf("%d\t",a[i][j]);
} 
} 
for(i=n-3;i<=n-2;i++)
{
for(j=n-2;j==n-2;j++)
{
  printf("%d\t",a[i][j]);
}
}
for(i=n-2;i==n-2;i++)
{
for(j=n-3;j>=n-4;j--)
{
  printf("%d\t",a[i][j]);
}
}
 for(i=n-3;i==n-3;i++)
{
for(j=n-4;j<=n-3;j++)
{
  printf("%d\t",a[i][j]);
}
}
} 
}
return 0;
}

此循环仅在您编码时为5 * 5。

答案 1 :(得分:0)

5 * 5样本

#include<stdio.h>

int main(){ 
    int i,j,m,n,a[5][5];
    //scanf("%d %d",&m,&n);
    //if(m>=1 && m<=5 && n>=1 && n<=5){
    m = n = 5;
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            scanf("%d", &a[i][j]);
        }
    }
    int side_size = m;
    int row = 0, col = 0;//start point
    int side = side_size -1;
    while(side > 1){
        for(i = 0; i<side ;++i)
            printf("%d ", a[row][col++]);//MOVE RIGHT
        for(i = 0; i<side ;++i)
            printf("%d ", a[row++][col]);//MOVE DOWN
        for(i = 0; i<side ;++i)
            printf("%d ", a[row][col--]);//MOVE LEFT
        for(i = 0; i<side ;++i)
            printf("%d ", a[row--][col]);//MOVE UP
        ++row;++col;
        side -= 2;
    }
    printf("%d\n", a[row][col]);

    return 0;
}

答案 2 :(得分:0)

我会使用前进右转方法

int max_x = 4;
int min_x = 0;
int max_y = 4;
int min_y = 0;
int x = 0;
int y = 0;
int direction = 0; // 0-RIGHT, 1-DOWN, 2-LEFT, 3-UP
int count = 0;

int go_forward(){
    switch(direction){
        case 0: 
            if( x+1 > max_x ){ min_y++; return 1; }
            else x++;
            break;
        case 1: 
            if( y+1 > max_y ){ max_x--; return 1; }
            else y++;
            break;
        case 2: 
            if( x-1 < min_x ){ max_y--; return 1; }
            else x--;
            break;
        case 3: 
            if( y-1 < min_y ){ min_x++; return 1; }
            y--;
            break;
    }
    return 0;
}

int turn_right(){
    direction = (direction+1)%4; // 0-RIGHT, 1-DOWN, 2-LEFT, 3-UP
}

int main(){
    /* int matrix[5][5]={    { 1,  2,  3,  4,  5},
                    { 6,  7,  8,  9, 10},
                    {11, 12, 13, 14, 15},
                    {16, 17, 18, 19, 20},
                    {21, 22, 23, 24, 25}}; //TEST */
    //get matrix from input

    int cango;
    do{
        printf("%d ", matrix[y][x]);
        count++;
        cango = go_forward();
        if( cango!=0 ){
            turn_right();
            cango = go_forward();
        }
    }while(cango == 0 && count < 25);

    return 0;
}
相关问题