首页 > 代码库 > CSDN 黑白球 (逻辑题)

CSDN 黑白球 (逻辑题)

题目意思:黑白球

http://student.csdn.net/mcs/question_detail/597

一个袋子里有两种颜色的球,黑色和白色,你每次从中取出两个球,如果是同色的,则在袋子里放一个白球,否则放回一个黑球。

最后袋子里剩下一个球,你能最后判断球的颜色么?

输入格式:

多组测试数据,每组数据一行,有两个数。W和B。 (0<=W,B<=1000000000, W + B > 0),分别表示最初白球和黑球的个数。

输出格式:

如果你能确定最后一定剩余白球,输出WHITE,如果能确定最终一定剩余黑球,则输出BLACK,否则输出UNKNOWN。

题目分析:

分情况进行取球就行了,(刚开始也没有想,就直接看题目的思路提示)

取球的情况分为三种:

1、取一黑一白,放回一个黑球,相当于取出一个白球。

2、取两个白球,放回一个白球,相当于取出一个白球。

3、取两个黑球,放回一个白球,相当于取出两个黑球,放回一个白球。

通过上述分析我们发现白球可以每次取出一个,而黑球只能成对取出,很显然我们对黑球个数进行分析。

当黑球个数为奇数时,黑球必然无法取尽,最后剩下一个黑球,白球无论有多少,通过前两种方法每次取出一个,都可以逐个取出,直到取尽,最后剩下一个黑球。

当黑球个数为偶数是=时,若黑球先去尽,则剩下白球,根据第二种情况每次取出一个白球,最后剩下一个白球无法取出;若黑球没有取尽,白球按照前两种情况取尽,最后余下两个黑球,那么最后又=一次根据情况三取出两个黑球放回一个白球,最后还是剩下一个白球。


AC代码:

#include<iostream>
using namespace std;
int main()
{
    long long w,b;
    while(cin>>w>>b){
        if(w==1&&b==0){
            cout<<"WHITE"<<endl;
            continue;
        }
        if(w==0&&b==1){
            cout<<"BLACK"<<endl;
            continue;
        }
        if(b%2==0) cout<<"WHITE"<<endl;
        else cout<<"BLACK"<<endl;

    }
    return 0;
}


CSDN 黑白球 (逻辑题)