赌徒

1097:赌徒 分数:2

时间限制:1 秒
内存限制:32 兆
特殊判题:


标签

  • 查找
  • 二分查找

题目描述

有n个赌徒打算赌一局。规则是:
每人下一个赌注,赌注为非负整数,且任意两个赌注都不相同。胜者为赌注恰好是其余任意三个人的赌注之和的那个人。如果有多个胜者,我们取赌注最大的那个为最终胜者。
例如,A,B,C,D,E分别下赌注为2、3、5、7、12,最终胜者是E,因为12=2+3+7。

输入格式

输入包含多组测试数据。每组首先输入一个整数n(1<=n<=1000),表示赌徒的个数。
接下来n行每行输入一个非负整数b(0<=b<32768),表示每个赌徒下的赌注。
当n=0时,输入结束。

输出

对于每组输入,输出最终胜者的赌注,如果没有胜者,则输出no solution。

样例输入

5




12
5

16 
64 
256 
1024
0

样例输出

12
no solution

【分析】

(分析过程附加在程序中)

用java语言编写程序,代码如下:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		while(input.hasNext()) {
			int n = input.nextInt();
			if(n == 0)
				break;
			
			int[] duzhu = new int[n];
			for(int i = 0; i < n; i++)
				duzhu[i] = input.nextInt();
			
			if(n <= 3) {
				System.out.println("no solution");
				continue;
			}
			
			Arrays.sort(duzhu);
			
			boolean findResult = false;//标志是否找到结果
			int result = 0;//最终胜利者的赌注
			//先假定数组duzhu中下标为i的值为胜利者的赌注,再确定两个“赌注”,
			//通过在数组中寻找第三个使得下标为1的值成为胜利者的赌注的数。
			//查找方法通过二分查找
			for(int i = n - 1; i >= 0; i--) {
				for(int j = 0; j < i; j++) {
					for(int k = j + 1; k < i; k++) {
						int temp = duzhu[i] - duzhu[j] - duzhu[k];
						//寻找数组中使得下标i的值成为胜利者赌注的第三个赌注的下标
						int r = binarySearch(k + 1, i - 1, duzhu, temp);
						//找到成立条件,标志结果,跳出循环
						if(r != -1) {
							findResult = true;
							result = duzhu[i];
							break;
						}
					}
					if(findResult)
						break;
				}
				if(findResult)
					break;
			}
			if(findResult)
				System.out.println(result);
			else
				System.out.println("no solution");
		}
	}
	//在数组src中从下标low到high进行二分查找,查找target
	//若在数组src中找到target,则返回target在数组中的下标,否则返回-1
	public static int binarySearch(int low, int high, int[] src, int target) {
		// TODO Auto-generated method stub
		while(low <= high) {
			int mid = (low + high) / 2;
			if(src[mid] == target)
				return mid;
			if(src[mid] < target)
				low = mid + 1;
			else
				high = mid - 1;
		}
		return -1;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考 基于python的系统开发 应用机器学习、深度学习等技术 源代码 供参考

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值