赌徒
来源:互联网 发布:mac共享设置 编辑:程序博客网 时间:2024/04/30 17:53
赌徒
时间限制: 1 Sec 内存限制: 32 MB
提交: 30 解决: 8
[提交][状态][讨论版]
题目描述
有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
2
3
5
7
12
5
2
16
64
256
1024
0
样例输出
12
no solution
题意概括:
查找数列中是否有一个数等于其他三个数之和,如果有输出,若有多个则输出最大的。
解题分析:
这道题我是用暴力查找的,但是要稍微优化下时间,不然会超时。我是将数列按升序排序,然后从最大的一端开始查找,这样一旦找到一个符合条件的就一定是最大的不管还有没有其他的值,找到后直接输出就可以了。
测试样例:
6
6
3
2
4
2
5
3
0
3
6
4
6
99
0
33
0
测试样例输出:
6
no solution
no solution
代码:
#include<stdio.h>#include<algorithm>using namespace std;int main(){ int n, i, j, flag, k; int a[1005]; while(scanf("%d", &n), n != 0){ flag = 0; for(i = 0; i < n; i++) scanf("%d", &a[i]); sort(a, a+n); for(i = n-1; i >= 2; i--){ for(j = i-1; j >= 1; j--){ for(k = j-1; k >= 0; k--){ if(a[i]-a[j] == a[k]){ printf("%d\n", a[i]); flag = 1; break; } } if(flag) break; } if(flag) break; } if(!flag) printf("no solution\n"); } return 0;}
阅读全文
2 0
- 赌徒
- 赌徒
- 赌徒
- 赌徒心理
- 小赌徒
- 赌徒心里
- 赌徒的日记
- 赌徒策略与机率
- 赌徒破产理论
- “魔鬼交易员”不过是赌徒
- HNCU1097:赌徒(二分)
- 有关赌徒必胜方法
- 赌徒的梦想
- 赌徒心态与玩家忠诚度
- 社交游戏玩家大多是老虎机赌徒
- 幻想一夜暴富 “彩民”变“赌徒”
- [编程题]Be Unique (赌徒下注问题)
- hdu1204(Markov过程,赌徒输光问题变形)
- hdu3861 The King’s Problem 强连通分量+二分图匹配
- 后缀数组
- C++ auto 的应用
- ubuntu下库的制作与使用
- HDU 4825 Xor Sum(01字典树)
- 赌徒
- 关于Gradle2.0的翻译说明
- Sun Open Net Environment (Sun ONE)软件架构
- oracle 备份表,删除表 drop delete truncate
- 判断一个点是否在三角形内
- 十一、Spring Cloud包管理
- 分页组件简版
- java基本类型和基本类型包装型比较时的自动拆箱和自动装箱
- android 云标签,文字墙(文字随机排列效果)