6-3 大牌点计算函数 (100 分)
大牌点,英文全称是High Card Point,简写为hcp 。它是衡量一手牌好坏的标准。我们规定A=4hcp, K=3hcp, Q=2hcp, J=1hcp.由此,拿到一手牌我们可以很快地计算出他的hcp。我们也可以很快知道,一副牌一共是40Hcp。这个值对于每副牌来说,就是东南西北4个人手上大牌点的总和。
现我们重新规定每张排的点数,请你写一段函数来计算一下一手排的大牌点。
新规定如下:3,4,5均为1点,6,7,8均为2点,9,T(代表10)均为3点,J为4点,Q为5点,K为6点,A为8点,2为10点,B(代表小王)为15点,R(代表大王)为20点。
输入: 第一行为一个整数n(0<n<100),共n手牌; 后边为n行,每行为一个长度不超过20的字符串,代表一手牌(字符串中只可能包含字符3456789TJQKA2BR)。
输入: 共n行,将输入的n手牌按牌的点数依次输出(测试用例保证没有点数相同的牌)。
函数接口定义:
int getPoint(char hand[]) ;
其中 hand
是用户传入的参数,为保存一手牌的数组。 函数的返回值为这手牌的大牌点数。
裁判测试程序样例:
#include<stdio.h>
#define MAX 110
int getPoint(char hand[]) ;
int main()
{
char poker[MAX];
int n ;
scanf( "%d" , &n) ;
while ( n -- )//循环n次
{
scanf( "%s" , poker ); //读入字符串
printf( "%d\n" , getPoint(poker) ); //输出
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
5
QQQ56AJR9Q
T5RJJJT82
RKT8J6QT5A
5T9RJ9J6B
9994A7QRBQ
输出样例:
58
51
54
55
65
思路:思路很简单,但是字符判断是不是45678,必须要加上单引号来判断,不然就识别失败。
代码:
#include<stdio.h>
#define MAX 110
int getPoint(char hand[]) ;
int main()
{
char poker[MAX];
int n ;
scanf( "%d" , &n) ;
while ( n -- )//循环n次
{
scanf( "%s" , poker ); //读入字符串
printf( "%d\n" , getPoint(poker) ); //输出
}
return 0;
}
int getPoint(char hand[]){
int i=0;
int ans=0;
while(hand[i]!='\0'){
if(hand[i]=='3' || hand[i]=='4' || hand[i]=='5'){
ans+=1;
}
else if(hand[i]=='6' || hand[i]=='7' || hand[i]=='8'){
ans+=2;
}
else if(hand[i]=='9' || hand[i]=='T'){
ans+=3;
}
else if(hand[i]=='J'){
ans+=4;
}
else if(hand[i]=='Q'){
ans+=5;
}
else if(hand[i]=='K'){
ans+=6;
}
else if(hand[i]=='A'){
ans+=8;
}
else if(hand[i]=='2'){
ans+=10;
}
else if(hand[i]=='B'){
ans+=15;
}
else if(hand[i]=='R'){
ans+=20;
}
else{
ans+=0;
}
i++;
}
return ans;
}