您的位置:首页 > 其它

PAT-B 1018. 锤子剪刀布 (20)

2017-02-09 16:32 417 查看
题目链接在此

该题没有什么拐弯之处,只需要把题意实现即可。

我的做法是将输入的B、C、F字符转换成对应的ASCII码,以逃避用串比较函数来进行一些字符相等的判断。

此处需要注意的是,想要将一个字符转换成其ASCII码,只需要用字符-‘\0’(而不是‘0’)即可。

下面贴出我的AC代码:

#include<stdio.h>
#include<string.h>

int main(){

int n;
scanf("%d",&n);
getchar();

char j,y;
int jWinTimes = 0, yWinTimes = 0; //甲、乙获胜的次数
//甲乙两方每个手势获胜的次数
int jB = 0, jC = 0, jJ = 0;
int yB = 0, yC = 0, yJ = 0;

for(int i = 0 ; i < n; i++){
scanf("%c %c", &j, &y);
if(i<n-1){
getchar();
}
int jnum = j-'\0';
int ynum = y-'\0';

//统计甲获胜的情况
if(jnum == 66 && ynum == 67){
jB++;
jWinTimes ++;
}else if(jnum == 67 && ynum == 74){
jC++;
jWinTimes++;
} else if(jnum == 74 && ynum == 66){
jJ++;
jWinTimes++;
}

//统计乙获胜的情况
if(jnum == 67 && ynum == 66){
yB++;
yWinTimes++;
} else if(jnum == 74 && ynum == 67){
yC++;
yWinTimes++;
} else if(jnum == 66 && ynum == 74){
yJ++;
yWinTimes++;
}

}

printf("%d %d %d\n",jWinTimes,n-jWinTimes-yWinTimes,yWinTimes);
printf("%d %d %d\n",yWinTimes,n-jWinTimes-yWinTimes,jWinTimes);

//拿到甲、乙获胜最多手势
int jmax = jB;
char J = 'B';
if(jmax < jC){
jmax = jC;
J = 'C';
}
if(jmax < jJ){
jmax = jJ;
J = 'J';
}

int ymax = yB;
char Y = 'B';
if(ymax < yC){
ymax = yC;
Y = 'C';
}
if(ymax < yJ){
ymax = yJ;
Y = 'J';
}

printf("%c %c\n",J,Y);

return 0;
}


《算法笔记上机训练实践指南》中的解法在代码的构造上显得更为巧妙,总体的算法思想并无二异,故此处不过多赘述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: