赌徒
来源:互联网 发布:js format 编辑:程序博客网 时间:2024/04/30 20:39
题目描述
有n个赌徒打算赌一局。规则是:
每人下一个赌注,赌注为非负整数,且任意两个赌注都不相同。胜者为赌注恰好是其余任意三个人的赌注之和的那个人。如果有多个胜者,我们取赌注最大的那个为最终胜者。
例如,A,B,C,D,E分别下赌注为2、3、5、7、12,最终胜者是E,因为12=2+3+7。
每人下一个赌注,赌注为非负整数,且任意两个赌注都不相同。胜者为赌注恰好是其余任意三个人的赌注之和的那个人。如果有多个胜者,我们取赌注最大的那个为最终胜者。
例如,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时,输入结束。
接下来n行每行输入一个非负整数b(0<=b<32768),表示每个赌徒下的赌注。
当n=0时,输入结束。
输出
对于每组输入,输出最终胜者的赌注,如果没有胜者,则输出no solution。
样例输入
52 3 5 7 1252 16 64 256 10240
样例输出
12no solution
题意概括:
有n个赌徒,没人下一个赌注,每个赌注都不相同,当某人的赌注是其余任意三个人的赌注之和时这个人即为赢家,若有多个赢家赌注最大视为最后的赢家。
解题思路:
先把这些赌注从小到大进行排序,然后写一个四层循环,从大到小依次找符合条件的赌注,题上说最多有1000个赌徒,四层循环如果完全跑一遍肯定会超时;某些情况是可以直接排除的,一个赌注比紧接着比它小的还不到它的三分之一那么这个人肯定不是赢家,或者紧接着比他小的三个赌注相加都小于它那么它肯定不符合条件也可以直接排除。
代码:
#include<stdio.h>#include<string.h>#include<math.h>int main(){int a[1100],d,e,m,n,i,j,k,f,f2,f1;while(scanf("%d",&n),n){memset(a,0,sizeof(a));for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0;i<n;i++){for(j=i+1;j<n;j++){if(a[i]<a[j]){d=a[i];a[i]=a[j];a[j]=d;}}}f1=0;f2=0;for(i=0;i<n;i++){for(j=i+1;j<n;j++){if(a[j]*3<=a[i])break;if(a[i]>a[j]+a[j+1]+a[j+2])break;for(k=j+1;k<n;k++){if(a[i]>a[j]+a[k]+a[k+1])break;for(e=k+1;k<n;k++){if(a[i]>a[j]+a[k]+a[e])break;if(a[i]==a[j]+a[k]+a[e]){printf("%d\n",a[i]);f1=1;break;}}if(f1==1)break;}if(f1==1)break;}if(f1==1)break;}if(f1==0)printf("no solution\n");}return 0;}
阅读全文
0 0
- 赌徒
- 赌徒
- 赌徒
- 赌徒心理
- 小赌徒
- 赌徒心里
- 赌徒的日记
- 赌徒策略与机率
- 赌徒破产理论
- “魔鬼交易员”不过是赌徒
- HNCU1097:赌徒(二分)
- 有关赌徒必胜方法
- 赌徒的梦想
- 赌徒心态与玩家忠诚度
- 社交游戏玩家大多是老虎机赌徒
- 幻想一夜暴富 “彩民”变“赌徒”
- [编程题]Be Unique (赌徒下注问题)
- hdu1204(Markov过程,赌徒输光问题变形)
- Hdu 5093 Battle ships【思维+二分图匹配】
- spring学习之JdbcTemplate
- 如何修改maven镜像为阿里云
- 十、声明式 REST 客户端-Feign 的高级特性
- 纯CSS实现小车动画
- 赌徒
- SQL入门经典-总体概括
- 2017acm福建省赛FZU 2273 Triangles
- #include <stdio.h> struct student { char name[21]; int cj[2]; //cj[0]表示期末成绩,cj[1]表示班级评议成绩 char ch[2]
- 使用Git时文件的生命周期和工作流程
- Windows PowerShell 实战指南-动手实验-3.8
- Redis主从复制
- input和raw_inpt
- SoftMax原理及代码