#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
int e[1000]={0},n;
char a[1000];
char b[1000];
int i,j,d=0,m,x,y,sum1,sum2,w,s;
int min;
int count = 0;
scanf("%d",&n);
while(d<n)
{ sum1=0;
sum2=0;
count=0;
scanf("%d%d",&w,&s);//形式化,沒有用
getchar();
gets(a);
getchar();
gets(b);
x=strlen(a);
y=strlen(b);
for(i=0;i<x;i++)
{
if(a[i]=='H'||a[i]=='S'||a[i]=='D'||a[i]=='C')
{
if(a[i+1]=='A')
{
sum1+=11;count++;
}
else if(a[i+1]=='1')
sum1+=10;
else
sum1+=a[i+1]-'0';
}
}
if(sum1>21&&count!=0)
sum1=sum1-count*11+count;
if(sum1>21&&count==0)
sum1=0;
count=0;
for(i=0;i<y;i++)
{
if(b[i]=='H'||b[i]=='S'||b[i]=='D'||b[i]=='C')
{
if(b[i+1]=='A')
{
sum2+=11;count++;
}
else if(b[i+1]=='1')
sum2+=10;
else
sum2+=b[i+1]-'0';
}
}
if(sum2>21&&count!=0)
sum2=sum2-count*11+count;
if(sum2>21&&count==0)
sum2=0;
if(sum1>sum2)
e[d]=1;//標記誰贏
d++;
}
for(i=0;i<n;i++)
{
if(e[i]==0)
printf("Case %d:Bob\n",i+1);
else
printf("Case %d:Alice\n",i+1);
}
return 0;
}
uj5u.com熱心網友回復:
解決了,把 scanf("%d%d",&w,&s);換成scanf("%d %d ",&w,&s);
uj5u.com熱心網友回復:
兩個getchar都可去掉uj5u.com熱心網友回復:
scanf("%d%d",&w,&s);和 scanf("%d %d ",&w,&s); 沒區別, 而且寫成前者會更好scanf輸入多個數,數之間用空白符分割, 空白符是空格,tab或者回車
這個是scanf自動支持, 根本就不需要你去指定
你可以輸入1 2回車
你可以是1回車2回車
根本沒有區別
你的問題反而是出現在那兩個getchar呼叫上, 純屬多此一舉,反而產生副作用, 回車提走了, 正常的有效資料也給提走了
根本不需要的,鍵盤緩沖的回車, scanf會自動過濾的
你自己scanf之后,馬上printf一次,就知道是否正確的獲得了結果了
網上有一堆說如何過濾鍵盤緩沖區里面的回車的說法, 但是,但是,但是,那都是在輸入單個字符的情況
你沒有單個字符的輸入需求 就沒有必要瞎折騰
uj5u.com熱心網友回復:
每組資料先 scanf("%d%d", &w,&s);
而后那一行的四個或者幾個也好, 回圈讀取字串就行了
char str[20]
for(I=0; I<w; I++)
scanf("%s", str); // str就是獨立分開的H10, H3 這樣的了
H10 H3雖然是一行,但是中間有空格的, %s自己回區分他們的
uj5u.com熱心網友回復:
可是這樣只換了思路,沒有解決gets這一用法的錯誤呀~
uj5u.com熱心網友回復:
用不到gets啦。H10, H3 這樣的都成為一個個單獨的字串,保存在臨時變數char str[20]當中
然后再用一個字串函式,從字串當中讀取內容
char ch; int d;
sscanf(str, "%c%d", &ch, &d); 就可以啦
str此時如果是"H10", 那么讀取完了ch就是H字符, d就是10了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/118655.html
標籤:C語言
