21点是一个非常有趣的游戏,游戏规则是两个人各自抽取若干张牌后
看谁点数更大(但不能超过21点,否则算0)如果两个点数相等,则庄家获胜
2 3 4 5 6 7 8 9点数都是各自的数码
10 J Q K 都是10点
A既可以当成11点,也可以当成1点。
输入
每组数据包括 n m表示庄家和闲家的牌总数
接下来两行分别表示庄家和闲家的牌
输出
输出比分以及庄家赢(HOST WIN)还是闲家赢(GUEST WIN)
样例输入
2 3 A J A A Q 2 6 Q J A A A A 7 K
样例输出
21 vs 12 HOST WIN 20 vs 21 GUEST WIN
#include<bits/stdc++.h>
using namespace std;
int f(string p,int n){
int count=0;
int js=0;
for(int i=0;i<n;i++){
if(p[i]=='1'&&p[i+1]=='0'){
count+=10;
i++;
continue;
}
if(p[i]=='J'||p[i]=='Q'||p[i]=='K')count+=10;
else if(p[i]=='A'){
count+=11;js++;
}
else count+=(p[i]-'0');
}
if(js!=0){
while(count>21){
count-=10;
js--;
if(js==0)break;
}
}
if(count>21)return 0;
else return count;
}
int main(){
int n,m;
while(cin>>n>>m){
string a;
string b;
for(int i=0;i<n;i++){
string st1;
cin>>st1;
a+=st1;
}
for(int i=0;i<m;i++){
string st2;
cin>>st2;
b+=st2;
}
int x=f(a,a.length());
int y=f(b,b.length());
if(x>=y)cout<<x<<" vs "<<y<<" HOST WIN"<<endl;
else cout<<x<<" vs "<<y<<" GUEST WIN"<<endl;
}
}
这道题一开始想用字符数组来做,后面一直有部分样例是错误的,后面回来debug了一下发现是没有10这个字符,输入10,cin会自动把他分开,于是用string来做,然后在f函数里面在加一个if(p[i]=='1'&&p[i+1]=='0'){
count+=10;
i++;
continue;
}条件就行了