注册 登录
编程论坛 C图形专区

我的方法有些繁琐,想问有没有更简单的方法

夏木兮 发布于 2016-02-02 20:15, 1714 次点击
题目:将N×N矩阵中元素的值按列右移1个位置, 右边被移出矩阵的元素绕回左边。
例如,N=3,有下列矩阵
1 2 3
4 5 6
7 8 9
计算结果为
3 1 2
6 4 5
9 7 8
#include <stdio.h>
int main()
{
    int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
    int i,j,t;
    for (i=0;i<3;i++)
        for (j=0;j<2;j++)
        {
            t=a[i][j];
            a[i][j]=a[i][j+1];
            a[i][j+1]=t;
        }
    for (i=0;i<3;i++)
        for (j=0;j<2;j++)
        {
            t=a[i][j];
            a[i][j]=a[i][j+1];
            a[i][j+1]=t;
        }
   
   for (i=0;i<3;i++)
   {
       for (j=0;j<3;j++)
       {
           printf("%d\t",a[i][j]);
       }
       printf("\n");
   }
}
2 回复
#2
拉链2016-02-03 07:18
看这个代码是不是精简些:
程序代码:
#include <stdio.h>
void main()
{
    int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
    int i,j,t;
    for (i=0;i<3;i++)
    {
        t=a[i][2];
        for (j=2;j>0;j--)a[i][j]=a[i][j-1];
        a[i][0]=t;
    }
   for (i=0;i<3;printf("\n"),i++)
       for (j=0;j<3;j++)printf("%d\t",a[i][j]);
}
#3
eagle1182016-04-28 21:08
void mov_matrix(int * data, int m, int n)
{
   int index;
   int temp = data[m*n-1];
   memmove(data+1,data,m*n*sizeof(int)-1)
   for (index = 0; index < n-1; index++){data[index*m] = data[(index+1)*m];}
   data[(n-1)*m] = temp;
}
1