题目描述C语言每日一练
2021年9月30日
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
分析注意题目的后半句才是关键,将前面m的数字变成后面m个数字,移动次数就为n-m,只需对数组进行n-m次移位就行了,同时注意移位过程中需要将最后一位先保存,等到前n-1位数移动完成后,再将这“最后一位数”放到数组第一位。
代码实现#includeint array_backward(int *array, int n, int m); int main() { int i = 0; int n = 0; int m = 0; printf("请输入数组的长度nn"); scanf("%d", &n); int array[n]; for(i = 0; i < n; i++) { printf("请输入第%d个元素", i); scanf("%d", &array[i]); } printf("请输入要移动的元素个数mn"); scanf("%d", &m); if((array_backward(array, n, m)) != 0) { printf("m不符合要求n"); return 1; } printf("移动后:n"); for(i = 0; i < n; i++) printf("%d ", array[i]); printf("n"); return 0; } int array_backward(int *array, int n, int m) { int i = 0; int j = 0; int tmp = 0; if(m > n) return -1; for(i = 0; i < n - m; i++) //移动总次数 { tmp = array[n - 1]; //保存最后一个元素值 for(j = n - 2; j >= 0; j--) //数组前n-1个元素依次向后移动一个单位 { array[j + 1] = array[j]; } array[0] = tmp; //将移动前的最后一位元素放到第一位 } return 0; }
运行结果



