java实现——数组元素循环右移

mac2022-07-05  30

数组元素循环右移只需要三步,如下:

将不需要越界的数组部分次序倒置,即对应首尾交换。将需要越界的数组部分对应首尾交换。将整体数组首尾交换。此时,前两次颠倒的部分回到原来的次序,并且实现了循环右移。 例如:数组{1,2,3,4,5,6}。把1234 首尾两两换位 成4321,56换成 65,再把432165两两换位 正好是 561234。 public class Main { public static void main(String[] args) { int N,M; /*第一行输入N(1<=N<=100)、M(M>=0)。*/ Scanner scan=new Scanner(System.in); while((N=scan.nextInt())>100||N<1){ System.out.println("ERROR INPUT, TRY AGAIN!!!"); } while((M=scan.nextInt())<0){ System.out.println("ERROR INPUT, TRY AGAIN!!!"); } int[] distarray=new int[N]; /*第二行输入N个整数,之间用空格分隔。*/ for (int i = 0; i < distarray.length; i++) { distarray[i]=scan.nextInt(); } /*数组循环右移*/ rightmovearray(distarray,M,N); /*在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。*/ for (int i = 0; i < distarray.length; i++) { System.out.print(" "+distarray[i]); } } private static void rightmovearray(int[] distarray, int m, int n) { // TODO Auto-generated method stub reverse(0,n-m-1,distarray); reverse(n-m,n-1,distarray); reverse(0,n-1,distarray); } private static void reverse(int startindex, int enddex, int[] distarray) { // TODO Auto-generated method stub for(int i=0;i<=(enddex-startindex)/2;i++){ int num=distarray[startindex+i]; distarray[startindex+i]=distarray[enddex-i]; distarray[enddex-i]=num; } } }
最新回复(0)