题解 P6529 【[COCI2015-2016#1] KARTE】

· · 题解

题目传送门

废话不多说,直接上思路

暴力模拟

  1. 先读入一个字符串
  2. 将牌储存到一个结构体中(用于判断重复)
  3. 将同一花色的牌的个数统计出来
  4. 用同一花色的总牌数减去这个花色的牌数
  5. 判断是否重复
  6. 输出

c++的代码如下:

#include<bits/stdc++.h>
using namespace std;
string a;
int p=13,k=13,h=13,t=13,sum;//由于一副扑克牌有54张,去掉大小王还有52张,因为有4个花色,则每个花色有13张 
struct node{
    char hua;//储存花色 
    int num;//储存点数 
}c[10010];
int main(){
    cin>>a;//读入字符串 
    for(int i=0;i<a.length();i+=3){//由于每三个字符为一张,所以i=i+3 
        if(a[i]=='P') p--;
            else if(a[i]=='K') k--;
            else if(a[i]=='H') h--;
            else t--;
        c[++sum].hua=a[i];//储存花色 
        c[sum].num=(a[i+1]-'0')*10+(a[i+2]-'0');//储存点数 
    }
    for(int i=1;i<sum;i++)
        for(int j=i+1;j<=sum;j++)
            if(c[i].hua==c[j].hua&&c[i].num==c[j].num){
                printf("GRESKA");
                return 0;
                //有牌相同,输出,直接结束程序 
            }
    //这里判断有牌相同的情况       
    printf("%d %d %d %d",p,k,h,t);//输出 
    return 0;
}