本题的难点(自认为)在于:如何不同时输入字符和数字,也即数字与字符间的转换,数字算特殊的字符,鉴于题目中要求一次输入的字符不止一个,故定义字符数组char score【30】【3】,首先输入一个字符串或数字,如果输入的是字符串,则可以用switch语句来决定输出结果;如果是数字,先把数字转换为数字,因为刚开始输入的不论是字符串还是数字都自动转换为字符,原因是存入的类型是字符数组,然后再利用相应的余数法和乘数法再加上switch语句,输出相应的结果。
教训是:一定要记得100时的输出,因为我就是忘记了这个,所以编译了好多次都错。
题目来源:http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=568
我的代码:
#include<stdio.h>
#include<stdlib.h>
void main(){
int i,n,a,b,c;
char score[30][3];
scanf("%d",&i);
for(n=0; n<i; n++)
{scanf("%s",score[n]);
if(*score[n]<='Z'&&*score[n]>='A')
switch (*score[n]) {
case 'Y': printf("4.0\n"); break;
case 'L': printf("3.4\n"); break;
case 'Z': printf("2.7\n"); break;
case 'J': printf("1.5\n"); break;
case 'B': printf("0\n");
}
else {
a=atoi(score[n]);
b=a/10; c=a%10;
switch(b){
case 10:printf("4.0\n");break;
case 9:printf("4.0\n");break;
case 8:if(c>=5)printf("3.6\n");else printf("3.2\n");break;
case 7:if(c>=5)printf("2.8\n");else printf("2.3\n");break;
case 6:if(c>=5)printf("1.8\n");else printf("1.3\n");break;
default:printf("0\n");}
}
}
}