下面我们介绍几种常见的输入输出格式。

A+BⅠ

这种输入的典型题目就是A+B

此题只要求用户求A+B的和,但此类题目往往说明测试数据有多组。则默认是到文件(后台测试用例在文件里)末尾结束。我们则可以采用循环的方式不断接收测试用例,并且每接收一组输出一组(不必全部输入再全部输出,因为OJ只比对一次最后的结果)。

参考C代码:

#include<stdio.h>
int main()
{ 
    int a,b; 
    while(scanf(“%d%d”,&a,&b)==2) //利用scanf的返回值 
    { 
        printf(“%d\n”,a+b); 
    } 
    return 0;
}

A+BⅡ

依然是A+B,我们可以看一下这道题

依然是求A+B,但它的输入数据为:

2

1 5

10 20

输出为:

6

30

此题相比第一道而言,会提前告诉你是几组数据,第一行的2就表示有两组数据。则此时我们可以考虑这样写:

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

A+B Ⅲ

继续是A+B,不同的是题目中说明,有多组数据,但是以A和B都为0时结束,则此时,就要做判断。不能依然输出0。

参考答案:

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

A+B Ⅳ

题目描述:此类题目是求n个数的和,输入为先输入一个数组n,然后后面跟n个数字,求这n个数字的和。同样有多组数据,当n=0时结束。题目链接

样例输入:

4 1 2 3 4

5 1 2 3 4 5

0

样例输出:

10

15

参考写法:

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

总结:

常见的ACM的输入输出格式如这些。

多组数据可能还会用到EOF、NULL这些宏。比如scanf、getchar、gets的返回值。

万变不离其宗,有些题目可能是这些格式的组合,亦或者是个别情况的变种,比如输出格式要求的变化等等,就需要各位ACMer灵活多变了。

在读取字符时,尤其是单个字符,建议直接 %s ,因为可能后面会有空格、回车、Tab,scanf读取时并不会忽略它们,这就导致我们后续输入会读到这些字符,所以我们就不用 %c 一个个读入,直接把字符当作字符串读入,存入char变量或者char数组

我们都知道有四舍五入,但是在计算机中为了更加精确的表示数据,采用的是奇进偶舍(也叫四舍六入五成双规则、银行进位法)。比如使用 %.2lf 输出double类型的数据。如果第三位是大于5就进位;小于5不进位;等于5且后面没有数,看前一位是不是偶数,奇进偶不进,若是后面有数直接进位,不用管。总结一句话就是 >5进位,<5舍去,=5奇进偶舍

上取整
Java ACM输入模式 acm输入输出格式java_Java ACM输入模式

求余为正数
Java ACM输入模式 acm输入输出格式java_算法_02

裴蜀定理(或贝祖定理)得名于法国数学家艾蒂安·裴蜀,说明了对任何整数a、b和它们的最大公约数d,关于未知数x和y的线性不定方程(称为裴蜀等式):若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。
它的一个重要推论是:a,b互质的充分必要条件是存在整数x,y使ax+by=1

如果 Java ACM输入模式 acm输入输出格式java_数据_03 均是正整数且互质,那么由 Java ACM输入模式 acm输入输出格式java_#include_04 不能凑出的最大数是 Java ACM输入模式 acm输入输出格式java_#include_05

getline读n行数据时,需要之前先读一次,为的是读掉第一行的回车

stringsteam的用法

闰年问题
1. 整百年,并且能被4整除
2. 非整百年,能被400整除不能被3200整除
3.
上面的两个都是在1万年以内的计算方法,足够用了

#include<iostream>
int main()
{
    int year;
    std::cin>>year;   //输入待判断年份,如2008
    std::cout<<year<<(((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0 && year % 3200 != 0) || year % 172800 == 0
)
) == 1 ? "年是闰年" : "年是平年")<<std::endl;
    return 0;
}