1. 程式人生 > >糖果謎題---網易遊戲(互娛)-遊戲測試開發工程師真題 題解

糖果謎題---網易遊戲(互娛)-遊戲測試開發工程師真題 題解

糖果謎題

時間限制:1秒

空間限制:32768K

小明是幼兒園的一名老師。某天幼兒園園長給小朋友們每人發一顆糖果,小朋友們拿到後發現有一些同學拿到的糖果顏色和自己相同,有一些同學糖果顏色和自己不同。

假定每個小朋友只知道有多少同學和自己拿到了相同顏色的糖果。

上課後,有一部分小朋友興奮的把這一結果告訴小明老師,並讓小明老師猜一猜,最少有多少同學拿到了糖果。

例如有三個小朋友告訴小明老師這一結果如下:

其中第一個小朋友發現有1人和自己糖果顏色一樣,第二個小朋友也發現有1人和自己糖果顏色一樣,第三個小朋友發現有3人和自己糖果顏色一樣。

第一二個小朋友可互相認為對方和自己顏色相同,比如紅色;

第三個小朋友不可能再為紅色(否則第一二個小朋友會發現有2人和自己糖果顏色相同),假設他拿到的為藍色糖果,那麼至少還有另外3位同學拿到藍色的糖果,最終至少有6位小朋友拿到了糖果。

現在請你幫助小明老師解答下這個謎題。

輸入描述:

假定部分小朋友的回答用空格間隔,如 1 1 3

輸出描述:

直接列印最少有多少位小朋友拿到糖果
如 6

輸入例子1:

1 1 3

輸出例子1:

6

輸入例子2:

0 0 0

輸出例子2:

3

例子說明2:

三位小朋友都沒發現有人和自己的顏色相同,所以最少的情況就是三位小朋友糖果的顏色均不同
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main()
{

    map<int,int> m;
    vector<int> v;
    int x,num=0;
    while(cin>>x)
    {
        v.push_back(x);
        m[x]++;
    }
    for(int i=0;i<v.size();++i)
    {
        if(m[v[i]]<=0) continue;
        x=v[i];
        if(m[x]>0)
        {
            num+=x+1;
            m[x]-=x+1;
        }
    }
    cout<<num;
    return 0;
}