1008
package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) { // write your code here Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int M=sc.nextInt(); int i; int j=0; int[] num=new int[N]; int[] turn=new int[N]; for (i=0;i<N;i++){ num[i]=sc.nextInt(); } for (j=0;j<N;j++){ if(j>M-1){ turn[j]=num[j-M]; } if(j>=0&j<M){ turn[j]=num[N-M+j]; } } for (j=0;j<N;j++){ if (j<N-1){ System.out.print(turn[j]+" "); } else{ System.out.println(turn[j]); } } } }
这样14分,明显不行。
package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) { // write your code here Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int M=sc.nextInt(); int i; int j,k,temp; int[] num=new int[N]; for (i=0;i<N;i++){ num[i]=sc.nextInt(); } for (i=N-M,j=0;i<N;i++,j++){ if (i<=(2*N-M-1)/2){ temp=num[i]; num[i]=num[N-1-j]; num[N-1-j]=temp; } } for (i=0,k=0;i<N-M;i++,k++){ if(i<=(N-M-1)/2){ temp=num[i]; num[i]=num[N-M-1-k]; num[N-M-1-k]=temp; } } for (i=N-1;i>=0;i--){ if (i>0&i<=N-1){ System.out.print(num[i]+" "); } else if(i==0){ System.out.println(num[i]); } } } }
两次循环倒序输出,没有添加新数组,还是不成。
import java.util.Scanner; public class Main { public static void main(String[] args) { // write your code here Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int M=sc.nextInt(); int i; int j,k,temp; int[] num=new int[2*N]; for (i=0;i<N;i++){ num[i]=sc.nextInt(); num[i+N]=num[i]; } M=M%N; for (i=N-M;i<2*N-M;i++){ if (i<2*N-M-1){ System.out.print(num[i]+" "); }else if(i==2*N-M-1){ System.out.print(num[i]); } } } }
M=M%N;这句代码如果没有则部分正确,说明题目中没有明确M一定小于N,当M=N时,移动之后的数组和以前的数组完全一样,所以需要对M求余。
勿在浮沙筑高台