一、多点测试的三种输入类型
1、while···EOF型
题目没有给定输入的结束条件,那么默认读取到文件未尾。可以利用scanf的返回值是否为EOF来判断输入是否结束。
while(scanf("%d",&n)!=EOF){
}
代码的含义:只要scanf的返回值不为EOF(文件中的数据没有读完)就反复读取n,执行while中的内容,读入文件末尾时退出while循环。
2、while···break型
要求当输入的数据满足某个条件时停止输入。 第一种写法:在while···EOF的内部进行判断,当满足退出条件时中断当前while循环
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==0&&b==0)
{
break;
}
}
第二种写法:把退出条件的判断放到while语句中,使其与scanf用逗号隔开:
int a,b;
while(scanf("%d%d",&a,&b),a||b)
{
}
3、while(T- -)型
给出测试数据的组数,然后才给出相应数量的输出数据,组数用变量T来记录,一共进行T次循环。
int T;
scanf("%d" ,&T);
while(T--)
{
scanf("%d",&a);
}
二、三种常见的输出类型
1、正常输出
2、每组数据输出之后都额外加一个空行
加上一个换行就行
3、两组输出数据之间有一个空行,最后一组数据后面没有空行
这种一般出现在while(T- -)的情况下,只需要通过判断T是否已经减小到0判断是否应当输出额外的换行。
int T;
scanf("%d" ,&T);
while(T--)
{
scanf("%d",&a);
if(T>0)
{
printf('\n');
}
}
类似的要求:输出一行N个整数,每两个数之间用空格隔开,最后一个数后面没有空格。
for(int i=0;i<n;i++)
{
printf("%d",a[i]);
if(i<n-1)printf(" ");
else{
printf("\n");
}
}
最后需要注意的是,在多点测试中,每一次循环都要重置一下变量和数组(重置数组使用memset或fill函数),否则在下一次数据来临的时候变量和数组的状态就不是初始状态了。
|