7-1 数组循环左移 (20 分)
本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥)个位置,即将a中的数据由(a0a1⋯an−1)变换为(am⋯an−1a0a1⋯am−1)(最前面的m个数循环移至最后面的m个位置)。如果还需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
输入第1行给出正整数n(≤)和整数m(≥);第2行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出循环左移m位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
8 3 1 2 3 4 5 6 7 8
输出样例:
4 5 6 7 8 1 2 3
#include <stdio.h> int main() { int n, m, a[110]; int i; scanf("%d %d", &n, &m); for(i=0; i<n; i++) scanf("%d", &a[i]); //8 3 //1 2 3 4 5 6 7 8 //4 5 6 7 8 1 2 3 m %= n; if(n == m){ for(i=0; i<n; i++){ if(i == 0) printf("%d", a[i]); else printf(" %d", a[i]); } } else{ for(i=m; i<n; i++){ if(i == m) printf("%d", a[i]); else printf(" %d", a[i]); } for(i=0; i<m; i++) printf(" %d", a[i]); } }
#include <stdio.h> #include<malloc.h> int main() { int N, M; int *Array; scanf("%d %d", &N, &M); Array = (int *)malloc(sizeof(int)*(N+1)); for(int i=1; i<=N; ++i) scanf("%d", &Array[i]); M = M%N; for(int i=M+1; i<=N; i++){ if(i == M+1) printf("%d", Array[i]); else printf(" %d", Array[i]); } for(int i=1; i<=M; i++) printf(" %d", Array[i]); }
作者:7oDo
仅供参考,请勿抄袭。
Hang Hang Hang !!!