第一讲 ACM中基本的输入输出

第一讲 基本的输入输出

一.ACM中常见的几种输入方式

我们称一组测试数据为一个Case。根据题目Case数量分为两类:

1. Case的情况

此类情况在比赛中比较少见,而且我们一般遇到这种情况的处理方式也是作为多Case情况的第一种方式,请参阅2.1

2. Case的情况

在比赛中经常会见到各种多Case的输入情况。我们根据给出Case数量的方式又分为以下几类:

2.1 直到读至输入文件结尾为止。

例1.HDU 1089

解答:

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

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

2.2 先给出Case数量T,然后给出TCase

2.HDU 1090

解答:

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

说明:我们一般以T作为Case数量,并且以whlie(T--)作为循环控制,而不是用for循环。这样做的好处是不需要利用循环变量i来控制循环次数。

2.3 以某个特殊输入为结束标志。

例3.HDU 1091

解答:

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

2.4 混合方式

4. HDU 1092

解答:

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

说明:我们一般采用变量ans来表示最终结果,还有一些常用的变量如:cnt(计数)vis[](访问标记数组)ncase(测试数据组数)。希望大家能够熟练使用这些变量名称。

二.ACM中常见的几种输出方式

一般输出格式比较容易控制,只要严格按照题目要求来就可以了。但还是要注意以下几个问题:

1.多Case的输出时Case之间是否有空行。

2.最后一组Case之后是否有空行。

3.一组Case需要输出多个数据时,最后一个数据后面一般是没有空格的。

对于输出格式的控制,这里不做过多介绍,希望大家参考C语言教材。

三.数据表示的范围

我们一定要熟记每种数据类型的表示范围:

1.int型整数范围:[-2^31,2^31-1],比[-10^9,10^9]略宽;

2.Double型浮点数范围:约为正负[10^-308,10^308]

3.我们也会遇到32int型整数处理不了的整数,这时如果数据范围不是很大时,我们一般采用64位整数。范围为[-2^63,2^63-1,比[-10^19,10^19]略宽;在LinuxGCC中使用long long,输入输出用%lld,在windowsVC6.0中使用__int64,输入输出用%I64d。具体使用哪种做法要视OJ而定。

4.对于64位整数也表示不了的整数或者double型表示不了的浮点数,我们会专门利用大数处理,这个以后再详细介绍。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值