1. 程式人生 > 實用技巧 >題解 P6529 [COCI2015-2016#1] KARTE

題解 P6529 [COCI2015-2016#1] KARTE

題目傳送門: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;
}