ACM模式输入数据的处理(C/C++)

参考资料

版权声明:本文为CSDN博主「迂者-贺利坚」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sxhelijian/article/details/8978850


1.1 最简单的输入

例1:

Description
计算 a+b

Input
两个整数 a,b

Output
a+b的值


Sample Input
1 2

Sample Output
3

这种最简单的输入,接受一组输入,针对这组输入计算出值即可。这与平时的程序设计并无差异。解决办法是:

#include <stdio.h>
int main()
{
    
    
    int a,b;
    scanf("%d %d",&a, &b);
    printf("%d\n",a+b);  //对其他题目,换成要求的复杂处理与输出
    return 0;
}

1.2 一次运行,要输入多组数据,直到读至输入文件末尾(EOF)为止

例2:

Description
计算 a + b

Input
多组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行 

Output
每组的两个整数(a和b)求和并输出,每组的求和结果独占一行

Sample Input
1 5
10 20
400 516

Sample Output
6
30
916

这种输入包含多对输入数据,需要构造一个循环读取。因为没有指出到底有多少对输入,要有办法判断输入何时结束。解决办法是:

#include <stdio.h>
int main() 
{
    
    
	int a,b;
	while(scanf("%d %d",&a, &b) != EOF) // 输入结束时,scanf函数返回值为EOF(-1),即没有数据输入时会退出while循环
	{
    
    
		printf("%d\n",a+b);
	}
	return 0; 
}

说明1:scanf函数返回值就是读出的变量个数,如果一个都没有,则返回值是-1。EOF是一个预定义的常量,等于-1。

说明2:在调试程序时,键盘输入的数据,用CTRL-Z(即按住CTRL键不放,再按下Z)组合作为输入结束,此谓键盘输入设备的“文件末尾”。

1.3 一次运行,要输入多组数据,组数由第一个输入数据决定(在开始的时候输入一个N,接下来是N组数据)

例3:

Description
计算 a + b

Input
第一行是数据的组数N,从第二行是N组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行 

Output
每组的两个整数(a和b)求和并输出,每组的求和结果独占一行

Sample Input
2
1 5
10 20

Sample Output
6
30

需要先读入第一行确定组数N,而后写一次执行N次的循环进行处理即可。解决办法是:

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

1.4 输入不说明有多少组数据,但以某个特殊输入为结束标志。

平时做题中常见诸如“输入学生成绩,以-1结束”,没有学生得-1分的,这个结束数据可以要得。
例4:

Description
计算 a + b

Input
多组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行。当输入为 0 0 时,输入结束。

Output
每组的两个整数(a和b)求和并输出,每组的求和结果独占一行。

Sample Input
1 5
10 20
0 0

Sample Output
6
30

构造循环对数据进行处理,将是否遇到了要求结束的输入,作为循环是否结束的依据。解决办法是:

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

猜你喜欢

转载自blog.csdn.net/mahoon411/article/details/123479652