| 
 | 
 
15鱼币 
二维数组向右循环移动, 
先输入 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数组 
 
 -         }                           
 
 - }
 
  复制代码 
 
不知道 我的这个思路 是不是 对的。求指点 |   
 
 
最佳答案
查看完整内容 
这样看起来更清爽~~
#include
int main()
{
	int a[100][100], b[100][100], m, n, x;
	scanf("%d%d", &m, &n);
	for (int i = 0; i < m; i++)
		for (int j = 0; j < n; j++)
			scanf("%d", &a[j]);
	scanf("%d", &x);
	x = x%n;
	for (int i = 0; i < m; i++)
	{
		for (int j = n - 1; j >= 0; j--)
		{
			if (j > n - 1 - x)//把每行后x个元素位置不变地保存到b数组里
				b[j] = a[j];
			if (j >= x)// ... 
 
 
 
 
 
 
 |