只要第一题就可以了,该怎么实现做呢,题目就是上面的两张图片,内容也贴出来了
2条回答 默认 最新
- 技术专家团-小桥流水 2022-11-16 12:52关注
逐个右移,移动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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 python的qt5界面
- ¥15 无线电能传输系统MATLAB仿真问题
- ¥50 如何用脚本实现输入法的热键设置
- ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
- ¥30 深度学习,前后端连接
- ¥15 孟德尔随机化结果不一致
- ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
- ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
- ¥15 谁有desed数据集呀
- ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100