|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 meikokiyokiyo 于 2021-10-22 01:28 编辑
题目是:
有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数
void move(int[20], int, int);
int number[20], n, m,i;
printf("总共有多少个数?");
scanf_s("%d", &n);
printf("请输入数:\n");
for (i = 0; i < n; i++)
scanf_s("%d", &number[i]);
printf("要往后移多少位数?");
scanf_s("%d", &m);
move(number, n, m); //调用move函数
printf("现在的排序是:\n");
for (i = 0; i < n; i++)
printf("%d", number[i]);
printf("\n");
return 0;
}
void move(int array[20], int n, int m)
{
int* p, array_end;
array_end = *(array + n - 1); //最后一个值
for (p = array + n - 1; p > array; p--)
*p = *(p - 1);
*array = array_end;
m--;
if (m > 0)move(array, n, m); //终止循环
}
本帖最后由 jackz007 于 2021-10-22 11:15 编辑
- vvoid move(int array[] , int n , int m)
- {
- int i , t ;
- for(; m ; m --) { // 循环 m 次
- t = array[n - 1] ; // array[n - 1] 即将被覆盖,先进行保护
- for(i = n - 1 ; i ; i --) array[i] = array[i - 1] ; // 循环 n - 2 次,从尾部开始,把 array[0] ~ array[n - 2] 整体向后平移一个元素,成为 array[1] ~ array[n - 1]
- array[0] = t ; // 把原来的 array[n - 1] 填补到新的 array[0]
- }
- }
复制代码
当然,楼主的代码使用的是递归,总共递归 m 次,每次递归数组被平移一次。我这个代码使用循环,最终效果完全一样。
|
|