解题思路
1 2 3 4 5 6 7 8 9
前面都向后移动2的话
8 9 1 2 3 4 5 6 7
可以看出就是8 9 换到前面了
先保存最后一位的值9,然后前面的所有数字后移一位,再把9放到第一位
接下来就是重复循环
1.难点在于移动吧
void setarray(int arr[] , int n , int m)
{
int i=0,tmp=0;
while(m--)//移动m位数
{
//记录下每次的最后一位数,等前面的移动完成后再赋值给arr【0】
tmp = arr[n-1];
for(i=n-1;i>0;i--)
{
arr[i]=arr[i-1];
}
arr[0]=tmp;
}
}
2.剩下 的很简单
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//打印函数
void print(int arr[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
}
//调整数组的函数
void setarray(int arr[] , int n , int m)
{
int i=0,tmp=0;
while(m--)//移动m位数
{
//记录下每次的最后一位数,等前面的移动完成后再赋值给arr【0】
tmp = arr[n-1];
for(i=n-1;i>0;i--)
{
arr[i]=arr[i-1];
}
arr[0]=tmp;
}
}
int main ()
{
int n,m;
puts("请输入整数个数和移动位数(以空格隔开):");
scanf("%d%d",&n,&m);
//以整数的个数开辟数组
int sz = sizeof(int) * n;
int * arr = (int *)malloc(sz);
assert(arr);
//初始化数组
int i=0;
printf("请输入%d个数:\n",n);
for(i=0;i<n;i++)
{
scanf("%d",arr+i);
}
//输出原始数组
puts("调整前:");
print(arr,n);
//调整数组
setarray(arr,n,m);
//输出调整后的数组
puts("\n调整后:");
print(arr,n);
//释放内存 非常重要
free(arr);
arr=NULL;
return 0;
}