• 硬币游戏(博弈)


    题目描述

    Alice和Bob在玩一种硬币游戏,Alice先手,他们轮流在一张长方形桌面上摆放圆形硬币,要求硬币不能有重叠,硬币边沿不能越过桌面边沿,无法再放下硬币的人就输,现在你知道了桌面的长宽n,m和硬币的直径r,请问他俩都按照最优策略进行游戏,谁会最终赢得这个游戏。 

    输入

    第一行一个正整数T。(1<=T<=100)

    接下里T行每行三个整数n,m,r。(1<=n,m,r<=100)

    输出

    对于每行的用例输出一行,Ailce获胜输出“Alice”,Bob获胜输出"Bob"。 

    样例输入

    3
    1 1 1
    1 1 2
    2 2 1

    样例输出

    Alice
    Bob
    Alice


    解析:
    Alice 先手将硬币放在桌子中间,之后 Bob 每放一个硬币,Alice 在其中心对称位置摆放硬币既能必胜。所以 Alice 能放下第一个硬币就能获胜。
     
    昨天下午面对这道题时,我事实上摸索了好些时间,最后代码探索总结成这样的形式,侥幸AC了,嘻嘻。
     
    #include<bits/stdc++.h>
    using namespace std;
    int t,n,m,r;
    int main()
    {
    	cin>>t;
    	while(t--)
    	{
    		cin>>n>>m>>r;
    		if(r>n || r>m)
    		{
    			cout<<"Bob"<<endl;
    			continue;
    		}
    		
    		if(r==n && r==m)
    		{
    			cout<<"Alice"<<endl;
    			continue;
    		}
    		
    		/*if(r==m && r<n)
    		//n=2,m=1,r=1  Alice win!
    		{// n=3,m=1,r=1   Bob win!
    			//n=4,m=1,r=1  Alice win!
    			while()
    		}*/
    		if(n==2&&m==1&&r==1){cout<<"Alice"<<endl;continue;}	
    		if(n==3&&m==1&&r==1){cout<<"Bob"<<endl;continue;}
    		cout<<"Alice"<<endl;
    	}
    }
    

      

    标准代码:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	int t,n,m,r;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d%d%d",&n,&m,&r);
    		if(n>=r&&m>=r)     puts("Alice");//puts()函数用来向标准输出设备(屏幕)输出字符串并换行. 
    		else 		   puts("Bob");
    	}
    	return 0;
    }
    

      








    
    
  • 相关阅读:
    多线程调用本质
    音频编码解码器库 libZPlay
    C#多线程代码调试技巧
    SharpMap实践代码
    Work Queue based multithreading
    (转)C#写的NoSQL开源系统(系列)
    A .NET State Machine Toolkit Part I
    在线开发环境地址
    数字音乐商KKBOX三季度将进军日本市场
    苹果官方购置iPad用户将获1100元退款
  • 原文地址:https://www.cnblogs.com/dragondragon/p/11338134.html
Copyright © 2020-2023  润新知