逐个右移,移动m次就可以了
(1)思路
将数组最后一个元素用临时变量t保存,整个数组后移1个位置,然后将 t 中的元素填充到数组的第一个位置,相当于数组整体右移了1位,重复上述操作m次,即可实现所需功能
(2)adjust及完整代码
#include <stdio.h>
#include <stdlib.h>
void adjust(int p[], int n, int m)
{
int i, j, t;
for (i = 0; i < m; i++) //重复m次操作
{
t = p[n - 1]; //保存数组最后一个元素
//数组整体右移
for (j = n - 1; j > 0; j--)
p[j] = p[j - 1];
p[0] = t; //将原来数组的最后1个元素放在数组的开头
}
}
int main()
{
int a[1000], n,m, i;
scanf("%d", &n); //输入n
for (i = 0; i < n; i++)
scanf("%d", &a[i]); //读取n个数
scanf("%d", &m); //读取m
adjust(a, n, m);
//输出
for (i = 0; i < n; i++)
printf("%d ", a[i]);
return 0;
}
(3)指针操作就是把参数换成指针,数组元素访问用 * (p+i)即可
#include <stdio.h>
#include <stdlib.h>
void adjust(int* p, int n, int m)
{
int i, j, t;
for (i = 0; i < m; i++) //重复m次操作
{
t = *(p + n - 1); //保存数组最后一个元素
//数组整体右移
for (j = n - 1; j > 0; j--)
*(p + j) = *(p + j - 1);
*p = t; //将原来数组的最后1个元素放在数组的开头
}
}
int main()
{
int* a=0;
int n,m, i;
scanf("%d", &n); //输入n
a = (int*)malloc(sizeof(int) * n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]); //读取n个数
scanf("%d", &m); //读取m
adjust(a, n, m);
//输出
for (i = 0; i < n; i++)
printf("%d ", a[i]);
free(a); a = 0;
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!