笔试题

来源:互联网 发布:和网络有关的英文单词 编辑:程序博客网 时间:2024/06/05 19:10

输入一个数组大小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;}}


0 0
原创粉丝点击