|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
move函数里的过程没看懂, 大佬们可以帮忙解答下吗,谢谢啦
- void move(int *arry, int n, int m)
- {
- int end_idx = n - m;//找到倒数第m个数据的位置,也就是要移动到数组首部的数据的起始位置
- for (int i = 0; i < m; i++) {
- int *p = arry + end_idx + i;//从倒数第m个数据的位置开始逐渐向后偏移直到数组尾部
- int tmp = *p;//获取到这个位置的值,用于数组前边数据向后偏移1位之后,向数组第i位赋值
- for (int j = end_idx + i; j > i; j--) {//从第i位开始逐个向后偏移一位
- *p = *(p - 1);
- p--;
- }
- *(arry + i) = tmp;//数组的前第i个数字逐个替换为后边被覆盖的值
- }
- }
- int main()
- {
- int number[32], n, m, i;
- cout <<("Please enter the number of numbers: ");
- scanf("%d", &n);//先确定要输入多少个数字
- printf("Please enter %d numbers: ", n);
- for (i = 0; i < n; i++) {
- scanf("%d", &number[i]);//输入指定个数的数字
- }
- printf("Number of positions to move: ");
- scanf("%d", &m);//确定要向后移动多少个位置
- move(number, n, m);
- for (i = 0; i < n; i++) {
- printf("%d ", number[i]);
- }
- printf("\n");
-
- return 0;
- }
复制代码
本帖最后由 风过无痕1989 于 2020-10-9 09:24 编辑
你的题做法是最开始设置的数组长度是 n + m,于是在函数中直接移动,程序看起来就有点复杂,如图MOV1,我的做法是设置一个临时数组 b[m],将要移动的 m 个数,移到 b[m] 暂存,在将前 n - m 个数移到末尾后,再将数组 b[m] 中的数据移到数组的最前面,如图MOV2
|
|