二维数组向右循环移动,
先输入 n,m,代表a[n][m].
然后输入 数组
最后输入循环位数
输出 循环后的数组。
举例 输出
3 3
1 2 3 3 1 2
4 5 6 6 4 5
7 8 9 9 7 8
7
首先我初学,所以定义的变量有点乱,希望大神们勿喷。
还有 我每一块 都注释了,不知道我的思路 有没有对。
出现 问题 ,输入完 循环位数 后,程序就错误停止了,不知什么原因。
# include <stdio.h>
main()
{
int a[100][100],b[100][100],i,n,m,j,k,x,p=0;
scanf("%d %d",&n,&m);
x=m;
for(j=0;j<n;j++)
{
for(k=0;k<m;k++)
{
scanf("%d",&a[j][k]);
}
}
scanf("%d",&i); //上面这部分 输入数组及循环位数
if(i>m)
i= i % m; //这部分如果循环位数超出列个数(m),求余。
for(j=0;j<n;j++)
{
for(k=0;k<m;k++)
{
b[j][k]=a[j][m-i];
m++;
}
}
//移动数组,将每行最后如需移动的数据移动到b数组,
//如举例7%3==1,移动一次,就把a数组最后一列移动到b数组
for(j=0;j<n;j++)
{
for(k=i;k<x;k++)
{
b[j][k]=a[j][p];
p++;
}
}
//将a数组 的前几列接在刚刚的b数组后面,完成移动。
for(j=0;j<n;j++)
{
for(k=0;k<m;k++)
{
printf("%d ",b[j][k]);
}
printf("\n"); //输出b数组
}
}
不知道 我的这个思路 是不是 对的。求指点 |