湖南省第6届程序大赛第二题 弟弟的作业

题目B

弟弟的作业

 

你的弟弟刚做完了“100以内数的加减法”这部分的作业,请你帮他检查一下。每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中ab是作业中给出的,均为不超过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",n);
14     return 0;
15 }

 

posted @ 2016-09-04 22:51  红雨520  阅读(384)  评论(0编辑  收藏  举报