题目

数组法
#include<stdio.h>
#define z 100
int main()
{
int a[z];
int b[z];
int i,m,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&m);
for(i=0;i<m;i++)//用另一个数组先将原数组中要向前移动的m个数字装起来。
{
b[i]=a[n-m+i];
}
for(i=n-1;i>=m;i--)//从后向前装入数组中
{
a[i]=a[i-m];
}
for(i=0;i<m;i++)
{
a[i]=b[i];
}
for(i=0;i<n;i++)//遍历输出。
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
相当于拿出要移动的,在原数组中的前面留出空位
指针法
#include<stdio.h>
move(int *a,int *b,int m,int n)
{
int i;
for(i=0;i<n;i++)
*(b+(i+m)%n)=*(a+i);//a,b 分别代表a,b数组的首地址,
}
int main()
{
int i,a[10000],b[10000],n,m;//数组一定要初始化
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
move (&a,&b,m,n);
for(i=0;i<n;i++)//遍历数组b[]
printf("%d ",b[i]);
return 0;
}
(b+(i+m)%n)=(a+i);
网友评论