【题目描述】
有n行m列个整数,使每一行其前面各数顺序向后移k个位置,每一行最后k个数变成最前面的k个数。要求用指向一维数组的指针变量完成。n、m和k均小于100
【输入说明】
输入包括n+1行数据,第一行三个数字分别表示n,m和k,接下来有n行,每行m个数据。
【输出说明】
每个数字后有一个空格
【输入样例】
2 10 3
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
【输出样例】
8 9 0 1 2 3 4 5 6 7
8 9 0 1 2 3 4 5 6 7
代码实现
#include <stdio.h>
int i,j;
//移动函数。指针p指向n行m列的二维数组
void Move(int (*p)[200],int n,int m,int k)
{
int a[200][200],q;
for(i=0;i<n;i++)
{
q=0;
for(j=m-k;j<m;j++)
{
a[i][q]=*(*(p+i)+j);
q++;
}
}
for(i=0;i<n;i++)
for(j=0;j<m-k;j++)
*(*(p+i)+m-1-j)= *(*(p+i)+m-1-k-j);
for(i=0;i<n;i++)
for(j=0;j<k;j++)*(*(p+i)+j)=a[i][j];
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ",*(*(p+i)+j));
printf("\n");
}
}
int main()
{
int m,n,k,a[200][200];
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
Move(a,n,m,k);
return(0);
}