查看: 373|回复: 1

多组测试数据

[复制链接]

237

主题

314

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
21620
发表于 2023-5-31 08:37:09 | 显示全部楼层 |阅读模式
用C++写:
[C++] 纯文本查看 复制代码
#include <iostream>
using namespace std;
int a,b;
while(cin>>a>>b)
{
    cout<<a+b<<endl;
}



用C写:
[C] 纯文本查看 复制代码
#include <stdio.h>
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
    printf("%d\n",a+b);
}



计数法
在有些题目中,先给一个正整数,告诉数据输入的组数,然后根据这个数组进行读取。


例题:给定两个整数a,b,求这两个数之和
【输入】
输入数据中的第一行是一个正整数T(0<=T<=100)。接下来有T行数据。每行数据中含有两个整数a、b(-103<=a,b<=103)
【输出】
对每行数据,输出对应的a+b的值。
【样例输入】
2
123 500
60 80
【样例输出】
623
140
【代码实现】
[C++] 纯文本查看 复制代码
 #include <stdio.h>
 int main()
 {
         int T;
         scanf("%d",&T);
         for(int i=1;i<=T;i++)
         {
                 int a,b;
                 scanf("%d%d",&a,&b);
                 printf("%d\n",a+b);
         }
         return 0;
 }



哨兵法
有些问题中不告诉循环次数,而是给定一个特殊值,表示输入的结束。这个特殊值被称为哨兵,因此这个输入方法称为哨兵法。


例题:给定两个整数a,b,求这两个数之和
【输入】
输入数据有多行。每行数据中含有两个整数a,b(0<=a,b<=109)。最后一行数据是0 0,标志输入结束。0 0一行本身不需要计算输出。
【输出】
对每行数据,输出对应的a+b的值。
【样例输入】
123 500
60 80
0 0
【样例输出】
623
140
【代码实现】
[C++] 纯文本查看 复制代码
 #include <stdio.h>
 int main()
 {
         int a,b;
         scanf("%d%d",&a,&b);
         while(a!=0||b!=0)
         {
                 printf("%d\n",a+b);
                 scanf("%d%d",&a,&b);
         }
         return 0;
 }


1.EOF法常用于不知道几组数据,用while循环,利用scanf()的返回值结束时为EOF。
2.计数法用于知道几组数据,用for循环。
3.哨兵法用于不知道几组数据,用while循环。利用当遇到特殊值哨兵(最后输入的数据)时结束。
回复

使用道具 举报

237

主题

314

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
21620
 楼主| 发表于 2023-5-31 09:10:39 | 显示全部楼层
多组数据尽量使用while (scanf("%d%d",&a,&b) == 2 ) 的形式, 此方法会确保读入的数符合你的类型定义, 即便后台数据文件末尾出错了也不至于让程序崩溃
数据要读入完全, 不要中途return 0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表