ACM学习总结之A+B问题

来源:互联网 发布:log4j sql日志级别 编辑:程序博客网 时间:2024/05/29 16:40

!!首先,需要注意,提交问题时选择dev C++或codeblocks对应的编辑器为GCC(其他对应更改)。注意注意!!

1.A+B  Problem(EOF)

   输入说明:输入数据有多组。每组一行,为整数A, B, A,B∈[0,32767]。以EOF做结束

   输出说明:输出A+B的值

   输入样例:

1[SP]2[EOL] 
3[SP]4[EOL] 
[EOF] 

   输出样例:

3[EOL] 
7[EOL] 
[EOF]

程序:

#include<stdio.h>int main(){int a,b;while(scanf("%d %d",&a,&b)!=EOF)       printf("%d\n",a+b);return 0;}

2.A+B(Case Count)

输入说明:输入第1行为一个整数n(1≤n≤10),代表测试的组数。下面有n组测试数据,每组1行,为2个整数,为A, B, A,B∈[0,32767]。

输出说明:输出A+B的值。

输入样例:

2[EOL] 
1[SP]2[EOL] 
3[SP]4[EOL] 
[EOF] 

输出样例:

3[EOL] 
7[EOL] 
[EOF] 
程序:
#include <stdio.h>int main (){    int a,b,n,m;    scanf ("%d",&n);    for (m=0;m<n;m++)        {scanf("%d %d",&a,&b);    printf("%d",a+b);}    return 0;}
3.A+B Problem(0)

输入说明:输入数据有多组。每组一行,为两个整数A, B, A,B∈[0,32767]。 输入以0 0结束。

输出说明:输出A+B的值。

输入样例:

1[SP]2[EOL] 
0[SP]0[EOL] 
[EOF] 
输出样例:

3[EOL] 
[EOF] 
程序:

#include<stdio.h>int main (){   int a,b;    while(scanf("%d %d",&a,&b)&&!(a==0&&b==0))        printf("%d\n",a+b);    return 0;}
或者:
#include<stdio.h>int main (){   int a,b;    while(scanf("%d %d",&a,&b))    {if(a==0&&b==0)break;        printf("%d\n",a+b);}    return 0;}

补充:现有一群兔子和一群鸽子,为统计出兔子和鸽子的数目,小明数出它们共有n个头,m只脚,请编写程序输出兔子和鸽子的数目

输入说明:输入包括多组数据。 每行包括2个数据:n、m(代表上面题目中提到的意思 1≤n,m≤230)。 n、m都是整数。 输入以0 0作为结束。

输出说明:每组数据的输出都只有一行,分别是鸽子的数量和兔子数量。 如果输入的测试数据不能求得结果,则输出Error

输入样例:

35[SP]94[EOL] 
1[SP]3[EOL] 
0[SP]0[EOL] 
[EOF] 
输出样例:

23[SP]12[EOL] 
Error[EOL] 
[EOF] 
程序:

#include<stdio.h>int main(){int m,n,x,y;while(scanf("%d %d",&n,&m)&&!(n==0&&m==0)){if(m%2!=0||m<2*n||m>4*n)printf("Error\n"); else {x=(4*n-m)/2;y=(m-2*n)/2;printf("%d %d\n",x,y); }}return 0; } 


4.A+B(0+EOF)

输入说明:输入数据有多组。每组一行,为两个整数A, B, A,B∈[0,32767]。 输入以0 0结束。
输出说明:输出A+B的值,每组数据之间保留一个空行。注意,是“之间”,最后只有一个换行

输入样例:  

1[SP]2[EOL] 
3[SP]4[EOL] 
0[SP]0[EOL] 
[EOF] 

输出样例:

3[EOL] 
[EOL] 
7[EOL] 
[EOF] 
程序:

#include <stdio.h>#include <stdbool.h>int main (){   int a,b;    bool isfirst=true;    while (scanf("%d %d",&a,&b))   { if(a==0&&b==0)break;    if(!isfirst)printf("\n");    printf("%d",a+b);    if(isfirst) isfirst=false;    }  return 0;}

5.A+B Problem (64bit Integer + EOF)

输入说明:Line i: two integer a and b seperated by one space Multiple cases, end with EOF  0<=a,b,(a+b)<=263-1

输出说明:Line i: (a+b)  the corresponding result of a+b

输入样例:

573247196999136902[SP]1171874011383462059[EOL] 
2093017816426442939[SP]1172643980007319715[EOL] 
2560745550527527105[SP]3566574549894016800[EOL] 
[EOF] 
输出样例:

1745121208382598961[EOL] 
3265661796433762654[EOL] 
6127320100421543905[EOL] 
[EOF] 
程序:

#include<stdio.h>int main(){long long  a,b;while(scanf("%lld %lld",&a,&b)!=EOF)       printf("%lld\n",a+b);return 0;}
综上,为A+B的几种类型。从中总结如下:

Ⅰ.常见的读入方式不外乎以下几种:
• ① 读入直到文件结尾(EOF);
• ② 读入数据组数T,然后处理T组数据;
• ③ 读入数据,直到输入为-1(或0)为止。

Ⅱ.八大输入输出方式:

第一种:A+B for Input-Output Practice (I)  

 

【输入】有多组输入数据,但没有具体的告诉你有多少组,只是让你对应每组输入,应该怎样输出。    

 

【输出】有多组输出,对应着每组输入,每组输出占一行。    

 

【代码】对于上述常见的情况,我们可以用下面的代码来解决。  

 

没有告诉我们有多少组,我们只需要等待即可:while (scanf (……) != EOF)    

 

相对应输入,输出只需要在while中输出。【完整代码】    

 

 

第二种:A+B for Input-Output Practice (II)  

 

【输入】先输入一个整数,告诉我们接下来有多少组数据,然后在输入每组数据的具体值。    

 

【输出】有多组输出,对应着每组输入,每组输出占一行。   

 

【代码】这也是一种常见的输入形式,简单的代码,我们可以先用scanf函数输入第一个整数来确定有多少行,然后在用for循环一组一组的输入。【完整代码】   

 

 

第三种:A+B for Input-Output Practice (III)    

 

【输入】有多组输入数据,没有具体的告诉你有多少组,但是题目却告诉你遇见什么结束。    

 

【输出】有多组输出,没对应一组输入都有相应的输出,结束标记不用管!    

 

【代码】这种类型的题目和第一种差不多,但是有一点值得注意,就是要加上结束条件。对于这道题我么

可以这样while(scanf(%d%d, &a, &b) && (!(a==0 && b==0))),当然你也可以将条件写在while循环的内部,条件满足时break即可。【完整代码】   

 

 

第四种:A+B for Input-Output Practice (IV)    

 

【输入】输入有多组,并却题目告诉你每组输入遇见什么结束,与第三种不同之处在于,每组输入都有相应的细化。    

 

【输出】没有什么变化,只需要对应输出即可。   

 

【代码】这类题目的代码是在第三种代码的基础之上,对于每种输入都进行第二种的精确输入。代码二者结合即可!【完整代码】    

 

 

第五种:A+B for Input-Output Practice (V)    

 

【输入】这次的输入实现输入一个整数,告诉我们有多少行,在输入每一行。对于每一行的输入,有划分为第一个数和其他的数,第一个数代表那一组数据一共有多少输入。    

 

【输出】没有变化,只需按照提议即可!   

 

【代码】代码没有什么,只是在第二种代码的框架上,在进行第二种输入的细化,对于每组输入都运行第二种的代码框架!【完整代码】    

 

第六种:A+B for Input-Output Practice (VI)  

  

【输入】有多种输入数据,对于每组输入数据的第一个数代表该组数据接下来要输入数据量。    

 

【输出】同上!   

 

【代码】这种类型的代码,就是再套上第一种代码的框架上,进行第三种代码的细化,没有什么特殊性。【完整代码】    

 

 

第七种:A+B for Input-Output Practice (VII)    

 

【输入】同第一种一样    

 

【输出】这道题的输出只是简单的在每组输出后边多加一个换行而已!    

 

【代码】在每组输出的后边多加一个换行符\n’【完整代码】    

 

 

第八种:A+B for Input-Output Practice (VIII)    

 

【输入】类似于第三种    

 

【输出】这种类型的输出注意的就是换行,这类题目说在输出样例中,每组样例之间有什么什么,所以我们在对应输出的同时要判断一下是否是最后一组输出,如果不是,就将题目所说的东西输出(一般是换行或空格),如果是,就直接结束。   

 

【代码】没有什么说的,你在判断是否结束不方便的时候可以判断是否开始,类似于判断结束的代码。如用for输入,一般判断结束,如用while输入一般判断初始。【完整代码】    

 

 

【综上所述】  

 

根据上边介绍的八种输入输出,我们可以归纳出如下内容:

 

对于输入,如果没有告诉你有多少组,我们常用while。如果告诉你有多少组,我们用for

 

对于输出,输入用while,我们常常判断是否为第一个输出样例,来指定特殊的输出格式。输入用for,我们常常判断是否为最后的输出样例,来指定特殊的输出格式。    

 

当然输入输出的格式远远不止上边的八种,但它们却是最常见的,特别是前三种是一定要掌握的。





原创粉丝点击