鱼C论坛

 找回密码
 立即注册
查看: 980|回复: 1

[已解决]英文算式

[复制链接]
发表于 2023-5-12 14:34:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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% 谢谢各位大佬
最佳答案
2023-5-12 14:35:16
问题出在你没有在每次输入时将  f  的值重新赋为 1。因此当第一次输入时,如果该行正确,则  f  的值为 1,但是在第二次输入时, f  的值仍然为 0,因此会出现错误的情况。

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

修改后的代码如下:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-12 14:35:16 | 显示全部楼层    本楼为最佳答案   
问题出在你没有在每次输入时将  f  的值重新赋为 1。因此当第一次输入时,如果该行正确,则  f  的值为 1,但是在第二次输入时, f  的值仍然为 0,因此会出现错误的情况。

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

修改后的代码如下:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 01:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表