华为杯--山理工---E剪子-包袱-锤
剪子-包袱-锤
Time Limit: 1000 ms Memory Limit: 65536 KiB
Special Judge
Submit Statistic
Problem Description
“石头、剪刀、布”是猜拳的一种,两人玩,起源于中国,然后传到日本、韩国等地,随着亚欧贸易的不断发展传到了欧洲,到了近现代逐渐发展到世界。
游戏规则中,石头克剪刀,剪刀克布,布克石头。
现在山东理工大学ACM集训队打算举行一场石头剪刀布锦标赛。比赛采取 100 局胜负制。
由于参赛选手过多,比赛决定采取初赛+决赛的方式决出最后的冠军。其中初赛每个人都要先和集训队开发的智能猜拳机器人阿尔法猫进行比赛,100局比赛中只要你获胜局数达到98局及以上即可获得胜利。
作为初代机器人,阿尔法猫的比赛策略是固定的。它的策略具体如下:
-
它会根据对方之前已经出过的石头次数、剪刀次数、布次数,来发出最不利于对方的操作。比如对方剪刀最多,它一定会出石头;对方布最多,它一定会出剪刀;对方石头最多,它一定会出布。
-
在比赛开始前,科学家blue长者会首先给它设定一个比赛策略,即给石头,剪刀,布各分配一个优先级,分别为 p,q,r。如果存在两个一样多,或三个一样多,或者一个都没出过(刚开局),那么它会优先选择优先级高的。比如说假如对方出过的剪刀和布一样多,石头比较少的话,那么它接下来的选择一定在石头和剪刀之间。如果石头的优先级为 3,剪刀的优先级为 2,那么它就会优先选择石头。
由于机器人只会依照既定策略进行操作也就是说,一旦你得到了机器人所执行的策略,也就是机器人在比赛中三种方式的优先级 p,q,r,那么这么100局比赛你肯定能全部获胜。(题目保证给出的三个优先级互不相同)
现在假定你足够聪明,请你编写程序战胜机器人进入猜拳决赛。
Input
有且仅有一行,三个整数 p,q,r 分别代表石头,剪刀和布的优先级,用空格隔开。
Output
首先输出一行,将刚输入的p,q,r再输出一遍,三个数之间用空格隔开。
接着输出 100 行,每行一个整数,依次为这 100 局你的选择。
石头输出 1,剪刀输出 2,布输出 3。
Sample Input
本题无样例输入
Sample Output
本题无样例输出
Hint
Source
改编
状态好,思路没乱,就一遍敲出来了,然而没看到要在输出一遍pqr
#include
typedef long long ll;
using namespace std;
int a[5];
int main(){int p,q,r;scanf("%d%d%d",&p,&q,&r);printf("%d %d %d\n",p,q,r);for(int i=0;i<100;i++){if(!i){if(p==max(p,max(q,r)))printf("3\n"),a[3]++;else if(q==max(q,max(p,r)))printf("1\n"),a[1]++;elseprintf("2\n"),a[2]++;}else{if(a[1]>a[2]&&a[1]>a[3])printf("2\n"),a[2]++;else if(a[2]>a[1]&&a[2]>a[3])printf("3\n"),a[3]++;else if(a[3]>a[1]&&a[3]>a[2])printf("1\n"),a[1]++;else{if(a[1]>a[3]&&a[1]==a[2]){if(r>p)printf("2\n"),a[2]++;elseprintf("3\n"),a[3]++;}else if(a[1]>a[2]&&a[1]==a[3]){if(r>q)printf("2\n"),a[2]++;elseprintf("1\n"),a[1]++;}else if(a[3]>a[1]&&a[2]==a[3]){if(p>q)printf("3\n"),a[3]++;elseprintf("1\n"),a[1]++;}else{if(p==max(p,max(q,r)))printf("3\n"),a[3]++;else if(q==max(q,max(p,r)))printf("1\n"),a[1]++;elseprintf("2\n"),a[2]++;}}}}return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
