|
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)// ...
|