題解 P6529 [COCI2015-2016#1] KARTE
阿新 • • 發佈:2020-08-08
題目傳送門:P6529 [COCI2015-2016#1] KARTE
這一個題目還是比較水的,首先,您要知道每一種花色有 \(13\) 張牌。
題目要求每一種花色少了多少張牌,所以我們可以開 \(\operatorname{a,b,c,d}\) 四個變數分別儲存 P,K,H,T
四種花色缺的牌數(初值設定成 \(13\) )。
如果有相同的撲克牌,請輸出 GRESKA
這個判斷可以使用 \(\operatorname{STL}\) 的 \(\operatorname{map}\) 來實現。
我們先輸入一行字串(儲存在 \(in\) 這個 string
類裡),然後 for(int i=0;i<in.size();i+=3) string now=s.substr(i,3)
細節說的差不多了,看看程式碼:
#include<string> #include<iostream> #include<map> using std::cin; using std::endl; using std::string; using std::getline; using std::cout; //當然可以直接 using namespace std; ,但是我想定義一個叫 map 的 map ,所以就一個一個 using 。 string in; std::map<string,bool> map; //用於判重 int a=13,b=13,c=13,d=13; //a -> P 花色, b -> K 花色, c -> H 花色, d -> T 花色 int main(){ std::ios::sync_with_stdio(false); 、、可以省略 getline(cin,in); for(int i=0;i<in.size();i+=3){ //三個三個判斷 string now=in.substr(i,3); //當前需要判斷的牌 if(map[now]) return cout<<"GRESKA"<<endl,0; //如果前面已經標記過這一張牌了,就輸出 "GRESKA" map[now]=true; //記得標記 if(now[0]=='P') a--; else if(now[0]=='K') b--; else if(now[0]=='H') c--; else if(now[0]=='T') d--; } cout<<a<<' '<<b<<' '<<c<<' '<<d<<endl; return 0; }