在在线测试系统中,经常会遇到多输入输出问题。
第一类问题是以某个特殊值作为结束标志。例如:输入一组正整数,输出其最大值,输入以0表示结束。
样例输入:1 2 4 3 5 1 2 0 输出:5
这类问题可以通过一个带有break的while循环来解决。在scanf内如果遇到特殊结束标志则跳出循环。
第二类是事先告知有多少个数,然后依次输入数据。例如输入n个正整数,输出其最大值。
样例输入: 8 1 3 2 4 8 7 5 6 输出:8
这类问题可以通过scanf得到数目后带一个简单的for循环来解决。
第三类问题是直接输入多个数据,然后以数据输入完毕作为结束标志。例如输入一个数输出其相反数
样例输入:1 2 -4 0.5 输出:-1 -2 4 -0.5
这类问题z在VC中的解决方案和在OJ的解决方案不同。
VC中可以通过如下的do循环框架来解决:
do{
scanf("%f%c",&x,&ch);
printf("%f\n",-x);
}while(ch!=’\n’);
而在OJ中,由于后台采用了文件处理方式,具有更大的灵活性。
while(scanf("%f",&x)!=EOF)
{ printf("%f\n",-x);}
例题如下:
输入一些不为0的整数,输出其中最大值。
输入分为三批。
第一批输入总数据量n1,然后输入n1个整数;
第二批输入n2个整数,以0作为结束标志;
第三批自由输入n3个整数。
在样例输入中第1,2行为第一批输入数据
第3行和第4行的前半段为第二批输入数据
其余为第3批数据。
输出输出这3批整数中最大值。
样例输入:
5 2 3 1
4 6
1 3 8 9
6 2 4 0 3 5
2 2 5 6
7
8
样例输出:
9
提示:
输出这3批整数中最大值。
#include <stdio.h>
int main()
{
int x,max;
scanf("%d",&x);
for(;x!=0;)
{
scanf("%d",&x);
if(max<x)
max=x;
}
printf("max=%d\n",max);
return 0;
}