笔试题
输入一个数组大小n,步长r和数组a,
做一个操作,使得b[i]=MED(a[i], a[i+1]modn, … a[i+r-1]modn),MED方法是返回数组排序后的中值(偶数个数的话,返回较大的那个中间值),用b[i]更新a[i],
最后 a中的各个元素都相同之后,返回a中的元素。
哎,通过了60%:
package com.yuxin.learn;
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n=in.nextInt();
int r=in.nextInt();
int[] a=new int[n];
for(int i=0;i<n;i++){
a[i]=in.nextInt();
}
int[] b=a;
while(endLoop(a)==false){
for(int i=0;i<n;i++){
b[i]=MED(a,n,i,r);
}
for(int i=0;i<n;i++){
a[i]=b[i];
}
r++;
}
System.out.println(a[0]);
}
private static int MED(int[] a,int n, int i,int r) {
int[] temp = new int[r];
for(int k=0;k<r;k++){
int tempindex=i+k;
if(tempindex>=n)tempindex=tempindex%n;
temp[k]=a[tempindex];
}
Arrays.sort(temp);
return temp[temp.length/2];
}
private static boolean endLoop(int[] a) {
int sum=0;
for(int i=1;i<a.length;i++){
if(a[i]!=a[0])sum++;
}
if(sum==0)
return true;
else return false;
}
}
还没有评论,来说两句吧...