1. 程式人生 > >[編程題] 糖果謎題 C++實現輸入未知個整數

[編程題] 糖果謎題 C++實現輸入未知個整數

i++ 就是 true result 顏色 第一個 tro als getline


重點,實現輸入未知個整數:
 vector<int> vec;
    string t;
    int num1;
    getline(cin,t);
    istringstream istr(t);
    while(istr >> num1)vec.push_back(num1+1);//表示如何實現獲取未知個整數




問題說明: 小明是幼兒園的一名老師。某天幼兒園園長給小朋友們每人發一顆糖果,小朋友們拿到後發現有一些同學拿到的糖果顏色和自己相同,有一些同學糖果顏色和自己不同。 假定每個小朋友只知道有多少同學和自己拿到了相同顏色的糖果。 上課後,有一部分小朋友興奮的把這一結果告訴小明老師,並讓小明老師猜一猜,最少有多少同學拿到了糖果。 例如有三個小朋友告訴小明老師這一結果如下: 其中第一個小朋友發現有1人和自己糖果顏色一樣,第二個小朋友也發現有1人和自己糖果顏色一樣,第三個小朋友發現有3人和自己糖果顏色一樣。 第一二個小朋友可互相認為對方和自己顏色相同,比如紅色; 第三個小朋友不可能再為紅色(否則第一二個小朋友會發現有2人和自己糖果顏色相同),假設他拿到的為藍色糖果,那麽至少還有另外3位同學拿到藍色的糖果,最終至少有6位小朋友拿到了糖果。 現在請你幫助小明老師解答下這個謎題。 輸入描述: 假定部分小朋友的回答用空格間隔,如
1 1 3 輸出描述: 直接打印最少有多少位小朋友拿到糖果 如 6 輸入例子1: 1 1 3 輸出例子1: 6 輸入例子2: 0 0 0 輸出例子2: 3 例子說明2: 三位小朋友都沒發現有人和自己的顏色相同,所以最少的情況就是三位小朋友糖果的顏色均不同

解答:

#include<bits/stdc++.h>
#include<vector>
using namespace std;
int main(){
    vector<int> vec;
    string t;
    int num1;
    getline(cin,t);
    istringstream istr(t);
    
while(istr >> num1)vec.push_back(num1+1
);//表示如何實現獲取未知個整數 sort(vec.begin(),vec.end()); int result = 0; int count = 0; bool flag = false; int tmp; for(int i = 0;i<vec.size();i++){ //cout<<vec[i]<<endl; if(!flag){ tmp = vec[i]; count
=1; flag = true; }else if(tmp == vec[i]){ count++; }else{ flag = false; int num = count/tmp; int y = count%tmp; if(y != 0) result = result + (num+1)*tmp; else result += num*tmp; i--; } } int num = count/tmp; int y = count%tmp; if(y != 0) result = result + (num+1)*tmp; else result += num*tmp; cout<<result<<endl; }

[編程題] 糖果謎題 C++實現輸入未知個整數