渊子赛马 问题 java

渊子赛马题目


关于思路:

马数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";
		else		
			return "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;
	}
}

上面是全面的实现

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

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

渊子赛马源码下载处

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值