矩阵的列向右移动n个单位
原创
©著作权归作者所有:来自51CTO博客作者wx633288bd5c53e的原创作品,请联系作者获取转载授权,否则将追究法律责任
将矩阵的列向右移动b个单位
问题描述:
……原始矩阵……
1 2 3
4 5 6
7 8 9
请输入右移的列数:1
……向右移1列的矩阵……
0 1 2
0 4 5
0 7 8
思路:
矩阵的列的转移要从所开始列最右端开始移动 ,右端的一列先转移到最大的移动列位置保存,就不会被覆盖 。其余列补零即可。
代码描述:
#define
void fun(int a[][N],int b){ //将矩阵的列向右移动b个单位
int i,j;
for(i=0;i<N;i++){
for(j=N-1-b;j>=0;j--){ //因为矩阵的列的转移要从所开始列最右端开始移动
a[i][j+b] = a[i][j]; //那么将最右端的一列先转移到最大的移动列位置保存,就不会被覆盖
}
for(j=0;j<b;j++){
a[i][j] = 0; //然后将矩阵左面的b列各元素赋值为0
}
}
}
全部代码展示:
#include <stdio.h>
#include <stdlib.h>
#define
void fun(int a[][N],int b){ //将矩阵的列向右移动b个单位
int i,j;
for(i=0;i<N;i++){
for(j=N-1-b;j>=0;j--){ //因为矩阵的列的转移要从所开始列最右端开始移动
a[i][j+b] = a[i][j]; //那么将最右端的一列先转移到最大的移动列位置保存,就不会被覆盖
}
for(j=0;j<b;j++){
a[i][j] = 0; //然后将矩阵左面的b列各元素赋值为0
}
}
}
int main() {
int array[][N]={1,2,3,4,5,6,7,8,9};
int i,j,k;
printf("\n……原始矩阵……\n");
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%d\t",array[i][j]);
}
printf("\n");
}
printf("请输入右移的位数:");
scanf("%d",&k);
fun(array,k);
printf("\n……向右移%d后的矩阵……\n",k);
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%d\t",array[i][j]);
}
printf("\n");
}
return 0;
}