您的位置:首页 > 编程语言 > C语言/C++

改变矩阵元素的位置

2016-01-21 22:02 323 查看
/**********

【习题7.067】编写函数将一个NxN的二维数组的周边元素

“顺时针”轮转1位。

例如:轮转前的数组   轮转后的数组

        1  2  3        4  1  2

        4  5  6  --->  7  5  3

        7  8  9        8  9  6

**********/

void turningClockwise(char a

)

{

char t;

int i;

t=a[0][N-1];

for(i=N-1;i>0;i--)a[0][i]=a[0][i-1];

for(i=0;i<N-1;i++)a[i][0]=a[i+1][0];

for(i=0;i<N-1;i++)a[N-1][i]=a[N-1][i+1];

for(i=N-1;i>0;i--)a[i][N-1]=a[i-1][N-1];

a[1][N-1]=t;

}

 /***********************/

这是anyview上面的一题,一开始也不太会最后参考了一下答案。我觉得答案提供了一种新的思路呢,就是要像这样换位置的话就应该先把一个元素拿出来,之后再用循环移动,而且这个循环是分开的,每个循环负责一定的区域。最后等到所有的元素移完位后,再把先前拿出来的元素再补上去。

/******由此可以引申******/

可以逆时针旋转,也就和上面那个差不多。

也可以左轮转,右轮转,上轮转,下轮转。相比上面,不同的只是把拿出来的一堆元素放在一个数组里面。

/**********

【习题7.072】编写函数将一个NxN的二维数组a的元素

按行向右轮转1位。

例如:轮转前的数组    轮转后的数组

        1  2  3        3  1  2

        4  5  6  --->  6  4  5

        7  8  9        9  7  8

**********/

void turningRight(char a

)

{

int i,j;

char t
;

for(i=0;i<N;i++)t[i]=a[i][0];

for(i=0;i<N;i++)a[i][0]=a[i][N-1];

for(j=N-1;j>0;j--)

    for(i=0;i<N;i++)a[i][j]=a[i][j-1];

for(i=0;i<N;i++)a[i][1]=t[i];

}

/******************************/

然后自己在codeblock上面又打了一次,当然这不像anyview一样有外部文件,所以就自己定义了一下。

但是自己打的话还是有很多问题的呢,我想输入和输出一个矩阵,但是输入时因为字符空格会被接收的问题,最终还是没想到,只好直接定义了,希望看到这里的大神们能告诉我一下怎么才能输入一个字符的矩阵。

试了一下N取其他值的,都可以运行。

/*********************************/

#include<stdio.h>

#define N 4

int main()

{

int i,j;

char a

={{'a','b','c','d'},{'e','f','g','h'},{'i','j','k','l'},{'m','n','o','p'}};/****这里要注意一下,‘10’,‘11’等并不是一个字符,被坑了好久****/

char t
;

for(i=0;i<N;i++)

    for(j=0;j<N;j++)scanf("%c",&a

);

for(i=0;i<N;i++)t[i]=a[i][0];

for(i=0;i<N;i++)a[i][0]=a[i][N-1];

for(j=N-1;j>0;j--)

    for(i=0;i<N;i++)a[i][j]=a[i][j-1];

for(i=0;i<N;i++)a[i][1]=t[i];

for(i=0;i<N;i++)

    for(j=0;j<N;j++)

    {

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

    if(j==N-1)printf("\n");

    }

}

做了这题后呢,获得的新思路就是要像这样换位置的话就应该先把一个元素拿出来,之后再用循环移动,而且这个循环是分开的,每个循环负责一定的区域。最后等到所有的元素移完位后,再把先前拿出来的元素再补上去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息