问题说明:
编写将一维数组中的元素向右循环移动n次的程序。
请定义函数,使数组的元素向右循环一位。 最右边的元素移动到最左边,剩下的元素移动到右边一位。
输入说明:
第一行中的整数n,表示数组的大小为n
第二行,n个数表示数组中的n个元素。
第三行,整数n表示数组向右移动n次。
输出说明:
移动后的数组元素。 两个元素之间用空格分隔。 行首和行尾没有多余的空间。
解决方法:按部就班定义函数,逐个移动元素
代码如下。
# include cstdio # include cmath # includeiostreamusingnamespacestd; voidmove(intn,int arr[]; int main () { int arr[10000]; int n; cinn; for(intI=0; in; I ) { cinarr[i]; (} int N; cinN; for(intI=1; i=N; I ) ) move(n,arr ); }for(intI=0; in; I () if ) I!=n-1 ) printf('%d ',arr[i]; elseprintf('%d ',arr[i] ); }返回0; }voidmove(intn,int arr[] ) ) inttmp=arr(n-1 ); for(intI=n-1; i0; I--}{arr[I]=arr[I-1]; } arr[0]=tmp; )方法)投机改变输出printf,得出移动后的序列,但序列本质没有移动
# include cstdio # include cmath # includeiostreamusingnamespacestd; int main () { int arr[10000]; int n; cinn; for(intI=0; in; I ) { cinarr[i]; (} int m; cinm; m=m%n; //m小于n,确保防止序列越界的for (inti=0; in; I({printf(%d ),arr ) )-mI ) %n ); if(in-1 ) cout '; }返回0; }