洛谷 P6529 【[COCI2015-2016#1] KARTE】
阿新 • • 發佈:2020-08-08
一道很簡單的模擬,思路很簡單,容易理解。
我們不用 \(STL\) 不用 \(struct\) 。
這裡提供兩種方法。
法 \(1\):
很正常的先讀資料,用四個陣列記錄當前花色,當前點數的牌的數量。如果一張牌出現兩次及以上,直接輸出 \(GRESKA\)。
然後將四個陣列掃一遍,看一看有沒有缺牌,缺的話就 就加 \(1\) 。
於是 \(code\)
#include<bits/stdc++.h> #define FOR(i,j,k) for(int i=(j);i<=(k);i++) using namespace std; char tmp; int x; int p[14],k[14],h[14],t[14]; int main() { while(cin>>tmp) { cin>>x; if(tmp=='P') p[x]++; else if(tmp=='K') k[x]++; else if(tmp=='H') h[x]++; else if(tmp=='T') t[x]++; if(p[x]>1||k[x]>1||h[x]>1||t[x]>1) { printf("GRESKA\n"); return 0; } } int nump=0,numk=0,numh=0,numt=0; for(int i=1;i<=13;i++) { if(p[i]==0) nump++; if(k[i]==0) numk++; if(h[i]==0) numh++; if(t[i]==0) numt++; } printf("%d %d %d %d",nump,numk,numh,numt); return 0; }
法 \(2\) :
我們一邊讀一邊做。
一開始假設每個花色都沒有一張牌。
於是
int ansp=13,ansk=13,ansh=13,anst=13;
然後每讀入一張牌,就將對應花色數量減 \(1\) 。
讀完,直接輸出即可。
\(code\)
#include<bits/stdc++.h> #define FOR(i,j,k) for(int i=(j);i<=(k);i++) using namespace std; char tmp; int x; int p[14],k[14],h[14],t[14]; int ansp=13,ansk=13,ansh=13,anst=13; int main() { while(cin>>tmp) { cin>>x; if(tmp=='P') p[x]++,ansp--; else if(tmp=='K') k[x]++,ansk--; else if(tmp=='H') h[x]++,ansh--; else if(tmp=='T') t[x]++,anst--; if(p[x]>1||k[x]>1||h[x]>1||t[x]>1) { printf("GRESKA\n"); return 0; } } printf("%d %d %d %d",ansp,ansk,ansh,anst); return 0; }