码迷,mamicode.com
首页 > 其他好文 > 详细

【技术向】麦哲伦的阴谋解题报告

时间:2015-06-02 21:39:30      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

 

一、  题目描述

 

內容 :

在禁忌的貝殼城裡存在著一座監獄

有N個犯人被關在裡頭

我們只知道 .....

"他們都帶著帽子" 

這是一頂神奇的帽子

稱作 "廬山帽"

是貝殼城裡的特產

分為紅色及白色兩種 

凡是帶上 "廬山帽" 的人 .....

就會 "不識廬山真面目" !!!!

而監獄內的所有犯人都被配帶了這一頂可怕的帽子 0.0

而邪惡的所長麥哲倫想到了一個邪惡又沒有良心的鬼計畫:

" 猜帽子 " 

只要能猜出自己的帽子顏色即可立即出獄

但猜錯者須以死謝罪 

而你可以假設監獄裡的犯人都跟羅賓一樣絕頂聰明

不會有想要以死謝罪的白癡行為

因此,在N個犯人的監獄中,麥哲倫所長將M頂紅帽配給其中的犯人

請問最少需要幾天,監獄內的所有犯人均可以確定自己的帽子顏色後出獄

PS. 犯人並不知道共有幾頂紅帽,只知道紅帽至少有一頂,而且不可互相討論 = =

輸入說明 : 

輸入兩數N,M (1 < M <= N < 231

代表N個犯人,M頂紅帽 

輸出說明 : 

輸出最少幾天所有犯人均可以確定自己的帽子顏色後出獄

 

二、  解题思路

看到这道题,有许多冗杂的部分,于是我决定先把不必要的

部分删去,题目就变成了下面这个样子

“在N個犯人的監獄中,麥哲倫所長將M頂紅帽配給其中的犯人,請問最少需要幾天,監獄內的所有犯人均可以確定自己的帽子顏色後出獄”

 

人数其实不是问题,重点是红帽有几顶。

假设人数十人,如果一人红帽的话,除了红帽本人,其他人只能看到一顶红帽子。

所以第一天的时候戴红帽的就可以很确定只有他是红帽(因其视角只有白帽),所以开心地走了,第二天大家发现红帽不见了(太棒了!),聪明如罗宾的人自然明白红帽肯定是他,然后其他人就发现自己都是白帽

如果是两个白帽呢?

第一天因为戴红帽的有看到另一顶红帽所以没人会轻举妄动,到了第二天那个红帽发现另一个红帽没有走,他就推断出自己头上的是红帽,所以第二天两红帽都走了,第三天大家也都走了

故红帽的全部走完需要m天,剩下所有白帽子加一天。

注意,这里还有一个陷阱。

如果m==n?所有人都是红帽子,还要加一吗?于是我写出了这样的代码。

 

#include <iostream>

using namespace std;

int main(){

    int a,b;

    while(cin >> a >> b){

        if (a==b)

            cout << b;

        else

            cout << b + 1;

        cout << endl;

    }

    return 0;

}

 

 

【技术向】麦哲伦的阴谋解题报告

标签:

原文地址:http://www.cnblogs.com/oierforever/p/4547533.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!