卿云 发表于 2023-5-12 14:34:45

英文算式

给你一个英文算式,判断该算式的正确与否

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)                   //把字符串中大写字母转换成小写
{
        int i;
        for(i=0;x!='\0';i++){
                if(x>='A'&&x<='Z') x+=32;
        }
}
int main()
{
        int a,b,r,p,i;
        int f=1;
        char s,d={"zero","one","two","three","four","five","six","seven","eight","nine"};
        while(scanf("%s",s)!=EOF)
        {
                lwr(s);
                for(i=1;i<5;i++){                           //输入
                        scanf("%s",s);
                        lwr(s);
                }
                for(i=0;i<10;i++){                        //把英文字符转换成整型
                        if(strcmp(s,d)==0) a=i;
                        if(strcmp(s,d)==0) b=i;
                        if(strcmp(s,d)==0) r=i;
                }
                if(strcmp(s,"add")==0) p=a+b;            //判断运算符号并计算
                else if(strcmp(s,"sub")==0) p=a-b;
                else if(strcmp(s,"mul")==0) p=a*b;
                else if(strcmp(s,"div")==0){               //除法运算时若分子等于0则输出false
                                if(b==0) f=0;
                                else p=a/b;
                        }
                if(strcmp(s,"equal")!=0) f=0;            
                if(f&&p==r) printf("true\n");                  //判断并输出
                else printf("false\n");
        }
        return 0;
}

运行是wrong answer 50% 谢谢各位大佬{:7_123:}

isdkz 发表于 2023-5-12 14:35:16

问题出在你没有在每次输入时将f的值重新赋为 1。因此当第一次输入时,如果该行正确,则f的值为 1,但是在第二次输入时, f的值仍然为 0,因此会出现错误的情况。

你需要在每次输入时将f的值重新赋为 1,可以在while循环开始时添加f=1; 。

修改后的代码如下:
页: [1]
查看完整版本: 英文算式