渊子赛马 问题 java

来源:互联网 发布:扬州龙韵古琴坊 淘宝 编辑:程序博客网 时间:2024/06/11 17:46

渊子赛马题目


关于思路:

马数Num

1、渊子想要赢,必须有半数以上的马快过国王的马

2、对于输入的马的速度,我们先要进行按照速度从小到大的顺序排列好在数组中。

3、这样考虑,赛马速度已知排好顺序了,只要渊子的赛马从半数的前一个赛马开始与国王最慢的的赛马一一对应比赛,全赢的时候就赢了比赛

4、接下来对一共参加赛马的数量Num分为奇数和偶数两种情况分别讨论

具体看代码即可

/* 功能:判断yuanzi 的马是否会赢?yuanzi 的马赢了,返回 YES. 否则返回 NO 输入参数: int num: 赛马的数量;   (1<= num <=1000) int[] speedYz: yuanzi 的马的速度; int[] speedOp: 对手的马的速度; 返回值: String型,yuanzi 的马赢了,返回 YES. 否则返回 NO; */public class Demo {/* * 作者:cslience * 时间:2013/12/7 * 赛马开始 */public String isYuanziWin(int num, int[] speedYz, int[] speedOp) {int count=0;sort(speedYz);sort(speedOp);/*比赛的马为偶数时候 * 只要渊子的赛马从Num/2-1号到最后都比国王的赛马从0开始到Num/2速度快就赢了 */if(num%2==0){for(int i=0;i<num/2+1;i++){if(speedOp[i]<speedYz[i+num/2-1]){count++;//渊子的马赢的次数}}}else{//比赛的马为奇数时候同偶数基本相同只要保证半数以上的马获胜即可for(int i=0;i<=num/2;i++){if(speedOp[i]<speedYz[i+num/2]){count++;}}}if(count>=num/2+1) return "YES";elsereturn "NO";}/* * 按照马的速度从慢到快排序selectSort */public  void sort(int[] array){int len=array.length;for(int i=0;i<len;i++){for(int j=i;j<len;j++){if(array[i]>array[j]){swap(i,j,array);}}}}/* * 交换两匹马的位置 */public  void swap(int m,int n,int[] array){int temp=array[m];array[m]=array[n];array[n]=temp;}}

上面是全面的实现

测试用例可以自己测试即可

源码我已经上传了,大家可以去下载

渊子赛马源码下载处

原创粉丝点击