3487. 石头剪刀布的套路

单点时限: 1.0 sec

内存限制: 256 MB

现在有一种石头剪刀布锦标赛。采取 100 局胜负制。对战 100 局,扣掉平局,谁赢得多谁就取得最终的胜利。

zzz 同学天天玩石头剪刀布,从而总结出了一套提高石头剪刀布胜率的方法。这套方法重点在于利用人的心理。石头剪刀布这三者,你可能觉得你是随机选择的,但其实不然。你还是会产生一定的偏向性。在若干局游戏后,有的人出石头的频数会高,有的人出布的频数会高,还有的人出剪刀的频数会高。

这点差异其实微乎其微,但却能成为决定胜负的关键。zzz 同学也就是靠着这微乎其微的差异,拿到了石头剪刀布世界冠军,攀上人生巅峰。

作为 zzz 同学的室友,你对 zzz 同学出石头剪刀布的套路掌握得一清二楚。具体如下:

他会根据对方之前已经出过的石头次数、剪刀次数、布次数,来决定最不利于对方的。比如对方剪刀最多,他一定会出石头;对方布最多,他一定会出剪刀;对方石头最多,他一定会出布。
在比赛开始前,他会给石头剪刀布各分配一个优先级,分别为 p,q,r。如果存在两个一样多,或三个一样多,或者一个都没出过(刚开局),那么他会优先选择优先级高的。比如说对方出过的剪刀和布一样多,石头就比较少,那么他接下来的选择一定在石头和剪刀之间。如果石头的优先级为 3,剪刀的优先级为 2,那么他就会优先选择石头。
zzz 同学是很死板的,他肯定不会违背这套策略。也就是说,一旦你搞到了他即将参加的比赛的优先级 p,q,r,你基本已经赢了,甚至连这 100 局每局是输是赢都想好了。

于是你膨胀了。你要去挑战世界冠军 zzz。

输入格式
有且仅有一行,三个整数 p,q,r ({p,q,r}={1,2,3}),用空格隔开。

不会有两个相同的测试点。

输出格式
输出 100 行,每行一个整数,依次为这 100 局你的选择。

石头输出 1,剪刀输出 2,布输出 3。

提示
此题无样例。
思路一:第一局可以根据对方的优先权获胜一局,第二局对方根据第一局你出的拳,确定出拳,这一局你又可以获胜,第三局你不论对方出什么,你都出前两个没出的。这样三局两胜,你出石头剪刀布的频率一样。这时对方又要根据优先级出拳,三局一循环。最终三局两胜。
思路二:第一局可以根据对方的优先权获胜一局,第二局对方根据第一局你出的拳,确定出拳,这一局你又可以获胜。那么第三局对方判断有两个频率一样的,根据优先级出拳必定又会出和第一局出拳一样,两局一循环,局局你赢。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int q,p,r;
	cin>>q>>p>>r;
	int flag[2];
	int M=max(max(q,p),r);
	if(M==q)//石头
	{
		flag[0]=3;
		flag[1]=1;
		//或者加入flag[2]=0;
	}
	if(M==p)//剪刀
	{
		flag[0]=1;
		flag[1]=2;
		//或者加入flag[2]=3;
	}
	else//布
	{
		flag[0]=2;
		flag[1]=3;
		//或者加入flag[2]=1;
	}
	for(int i = 0; i < 50;i++)
	{
		cout<<flag[0]<<endl;
		cout<<flag[1]<<endl; 
	}
	return 0;
	
 } 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值