马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
给你一个英文算式,判断该算式的正确与否
Input
每行一个英文的算式。数字用英文表示。比如12表示为one two每两个数字有空格。
有加减乘除四个操作(add,sub,mul,div),可能大小写会不一致。除法如果除不尽的话直接取整。
(题目降低了难度。保证每个操作数和结果大于等于0,小于等于9,即只有一位)
(保证每行的格式为 数的英文 操作的英文 数的英文 equal 数的英文)
Output
如果该行正确,输出true
反之输出false
Sample Input
one add two equal three
two div one equal thRee
one add tWo equal three
Sample Output
true
false
true
#include<stdio.h>
#include<string.h>
void lwr(char x[7]) //把字符串中大写字母转换成小写
{
int i;
for(i=0;x[i]!='\0';i++){
if(x[i]>='A'&&x[i]<='Z') x[i]+=32;
}
}
int main()
{
int a,b,r,p,i;
int f=1;
char s[6][7],d[10][7]={"zero","one","two","three","four","five","six","seven","eight","nine"};
while(scanf("%s",s[0])!=EOF)
{
lwr(s[0]);
for(i=1;i<5;i++){ //输入
scanf("%s",s[i]);
lwr(s[i]);
}
for(i=0;i<10;i++){ //把英文字符转换成整型
if(strcmp(s[0],d[i])==0) a=i;
if(strcmp(s[2],d[i])==0) b=i;
if(strcmp(s[4],d[i])==0) r=i;
}
if(strcmp(s[1],"add")==0) p=a+b; //判断运算符号并计算
else if(strcmp(s[1],"sub")==0) p=a-b;
else if(strcmp(s[1],"mul")==0) p=a*b;
else if(strcmp(s[1],"div")==0){ //除法运算时若分子等于0则输出false
if(b==0) f=0;
else p=a/b;
}
if(strcmp(s[3],"equal")!=0) f=0;
if(f&&p==r) printf("true\n"); //判断并输出
else printf("false\n");
}
return 0;
}
运行是wrong answer 50% 谢谢各位大佬
问题出在你没有在每次输入时将 f 的值重新赋为 1。因此当第一次输入时,如果该行正确,则 f 的值为 1,但是在第二次输入时, f 的值仍然为 0,因此会出现错误的情况。
你需要在每次输入时将 f 的值重新赋为 1,可以在 while 循环开始时添加 f=1; 。
修改后的代码如下:
|