题目B
弟弟的作业
你的弟弟刚做完了“100以内数的加减法”这部分的作业,请你帮他检查一下。每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过100的非负整数;c是弟弟算出的答案,可能是不超过200的非负整数,也可能是单个字符"?",表示他不会算。
输入
输入文件包含不超过100行,以文件结束符结尾。每行包含一道题目,格式保证符合上述规定,且不包含任何空白字符。输入的所有整数均不含前导0。
输出
输出仅一行,包含一个非负整数,即弟弟答对的题目数量。
样例输入 |
样例输出 |
1+2=3 3-1=5 6+7=? 99-0=99 |
2 |
这一道题目唯一可能难到人的就是数据的输入,它可能是数字可能是‘?’。但是只要你学会了使用sscanf函数,这道题目就是几行代码的事情。我在这稍微解释一下:
sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。
它的返回值 如果转化成功则返回参数数目,失败则返回-1,错误原因存于errno中。 返回0表示失败 否则,表示正确格式化数据的个数 例如:sscanf(ch, "%d+%d=%d", &a, &b, &c); 如果三个变成都读入成功会返回3。 如果只读入了第一个整数则会返回1。证明无法从ch读入第二个整数。
1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 char ch[50]; 5 int main() 6 { 7 int a,b,c,n=0; 8 while(scanf("%s",ch)==1) 9 { 10 if(sscanf(ch,"%d+%d=%d",&a,&b,&c)==3&&a+b==c)n++; 11 if(sscanf(ch,"%d-%d=%d",&a,&b,&c)==3&&a-b==c)n++; 12 } 13 printf("%d ",n); 14 return 0; 15 }