#include <stdio.h>
int main()
{
int m,n,i,j,J;
scanf("%d%d\n",&m,&n);
int a[n][n];
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
J=(m%n+j)%n;
a[i][J]=a[i][j];
}
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
我的思路是用数学公式表示平移的规律,我在草稿纸上写了很多次去验证我的公式“J=(m%n+j)%n”,都是可行的,就是运行时一大堆错误,搞不懂。
我发现题目好像也有问题,他说将第0列变为第n-m列,如果是这样的话,他测试的第一行的1就会到第一列,而不是样例输出中的第二列。 爪麻……
你这个肯定有问题,你复制过去了,但原来的数据存到哪里了?循环的话原来的数据都要存在,只是位置发生改变。所以你的代码是错误的。简单写的话,应该再开一个与原数组一样大的数组,然后计算位置,比原数据写入新数组位置中。