OJ平台输入输出注意事项

article/2025/10/22 22:55:04

文章目录

  • 输入输出
    • 多组数据的处理
    • 输入
      • 不给你说有几组输入
      • 给你说输入几组
      • 不给你说有几组输入,但是会有一个特殊输入作为结束标志。
    • 输出
      • 两组数据之间没有空行
      • 两组数据之间存在空行
      • 输出之间有空行

输入输出

多组数据的处理

由于ACM竞赛题目的输入数据和输出数据一般有多组(不确定),并且格式多种多样。在输入和输出的格式上,跟学校的C语言作业是不一样的。C语言作业一般都是一组数据的处理,但OJ平台一般都是多组数据的处理(不要感觉加一个循环就行)。例如:

//请计算这个梯形的面积                                                                 
#include <stdio.h>
int main()
{int a,b,c,S;//a为上底,b为下底,c为高printf("请依次输入梯形的上底,下底,高:");scanf("%d%d%d",&a,&b,&c);S=(a+b)*c/2;printf("所求梯形的面积为:%d",S);return 0; 
}

通过运行和计算可以看出,这道题只需要进行一次数据的输入,程序就结束了。
OJ平台的一个程序是需要进行多组数据的输入输出的。例如:
(题目:HDU1000)
在这里插入图片描述

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

如果你提交的是下面的代码

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

OJ会因为无法再次进行数据的输入而直接判你为错。
那有的人就会说,如果是要求多组数据,那么我直接来一个死循环不就行了?那么OJ平台也会很简答粗暴的判你超时。就像下面这样:

#include <bits/stdc++.h>
using namespace std;
int main()
{int m,n;while(1){scanf("%d%d",&m,&n);printf("%d\n",m+n);}return 0;
}

不信的话,就可以提交一下。
下面介绍一下几种常见的数据的输入输出:

输入

核心内容:scanf函数的返回值是成功读取数据的个数

不给你说有几组输入

常见形式如下(HDU1089):
(HDU1089)
这道题在C语言的角度来看,是极为简单的,只需要写出下面的代码即可:

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

但是在OJ上,这道题就是错的。因为它无法读入多组数据。应当写成

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

此处注意的是scanf的含义是成功读取数据的个数。 C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功(如果还不清楚就去查查EOF的含义),EOF的值为-1。 当然如果对EOF的理解不深刻的话,程序也可以写成下面的形式:

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

假如OJ上有三组测试数据,据需要输入到程序中,那么下面的程序就可以正确的在程序运行结束之前输入OJ想要测试的数据。那么我们分析一下我们的第一个程序,首先进入while循环,因为我们输入的数据一直都是两个数,所以2!=-1因此在程序结束之前,循环会一直进行下去,直到OJ的测试数据结束。与C语言的思路写出的程序相比,这个程序不仅可以处理多组数据而且可以在程序结束的时候也可以顺利结束。
为什么还有后面的那个好处?因为有的人想使用循环去处理数据,那么就会有一个问题,就是程序该结束的时候不结束。

给你说输入几组

常见格式如下(HDU1090):
在这里插入图片描述
在程序的一开始就告诉你要输入几组数据,然后直接一个循环就行。

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

就像上面的这个,它给你说它就两组数据了,你只需要做n组循环就行了。所以你即使只知道C语言的答题方式,你也可以写出来。

不给你说有几组输入,但是会有一个特殊输入作为结束标志。

常见格式如下(HDU1091):
在这里插入图片描述
这种类型与第一种相比,多了一个结束的标志。在书写程序的时候只需要加上程序结束的标志即可。

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

输出

两组数据之间没有空行

常见格式(HDU1089)
每一个输出对应一个输出,输出之间没有空行。
在这里插入图片描述
通过观察可以得知,两组数据之间不存在空行,输入的每一行对应输出的每一行。

两组数据之间存在空行

常见格式(HDU1095):一个输入对应一个输出,每个输出之间都有空行,每个输出之后都有空行。

在这里插入图片描述

#include<stdio.h>
int main()
{int m,n,j,sum;while(scanf("%d%d",&m,&n)!=EOF){sum=m+n;printf("%d\n\n",sum);//此处就是多打印出一个换行符}
}

输出之间有空行

一个输入对应一个输出,输出之间有空行(最后一组数据没有空行)。
常见格式(HDU1001):
在这里插入图片描述
处理方式有两种,个人感觉第一种好一点。
第一种:把最后一个特殊处理,前面每一组数据加两个换行符,最后一组数据加一个回车,把最后一个数据特殊处理。即:
在这里插入图片描述
第二种:把第一个特殊处理,把第一个正常输出一个数,不进行换行操作,但是在后续操作中,把前面一个换行符和下一个数据一同处理。
在这里插入图片描述

  int a,b,sum = 0,i=1;while(scanf("%d",&b)!=EOF){for(i =1;i<=b;i++)sum+=i;printf("%d\n\n",sum);sum=0;}return 0;

刷题:HDU1089~1096,后续闲下来的话,会写题解


http://chatgpt.dhexx.cn/article/bP111caK.shtml

相关文章

C++/Linux实战项目 - 负载均衡式在线OJ平台

目录 总览 简述 项目核心的三个模块 项目宏观结构 compile_server 编译与运行服务 总览分析 compiler.hpp runner.hpp compile_run.hpp compile_server.cc oj_server 基于MVC结构的oj服务设计 总览分析 Model 提供对数据的操作方法 View 使用后端数据对前端页面进…

OJ平台架构/用户权限验证/JAVA后端开发

转载自: 我的个人博客 OJ实验平台&#xff0c;采用沙箱后端运行代码&#xff0c;实现安全的实时评测&#xff08;OJ&#xff09;。此平台搭建的初衷为学校的数据结构实验提供课程代码的编写和测评&#xff0c;以此方便学生实验时得到实时的反馈&#xff0c;此后陆续被多个实验…

sql中检查时间是否重叠

先画一个时间轴&#xff0c;方便理解。 设新的时间块&#xff0c;开始时间为start&#xff0c;结束时间为end。数据库中的数据为item 这样可以直观的看出来&#xff0c;新的时间块插入进来&#xff0c;只需要判断 start<item.end and end > item.start 即可 当然上…

JS判断多个时间段是否有重叠(时分)

多个时间段比较 let dateAr [{ s: 01:00, e: 14:08 },{ s: 01:04, e: 02:05 },{ s: 05:21, e: 08:00 },{ s: 10:20, e: 12:08 }, ] function Fn() {for (let k in dateAr) {if (!judege(k)) {return false}}return true } function judege(idx) {for (let k in dateAr) {if (…

合并所有重叠的区间

Python-合并区间 题目 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 示例 1: 输入&#xff1a;interva…

关于sql语句中,统计时间重叠和时间不重叠

关于sql统计时间重叠和时间不重叠的问题 我们在开发过程中总会遇到这样的情况&#xff0c;一行数据中&#xff0c;有id、组、开始时间、结束时间。但是开始时间和结束时间肯定会出现时间重叠问题&#xff0c;比如说下面这种情况。 我们先找出时间重叠的公式&#xff1a; 可以发…

开始时间与结束时间重叠

let endNum ; //整个二维数组for(let itemName of showDate) {//for (let i 0; i < itemName.children.length; i) {if(itemName.screenId itemName.children[i].screenId) {// console.log(itemName.children[i])//把开始时间和结束时间转化成时间戳if(parseInt(itemNam…

在SQL Server中合并重叠日期

1.合并SQL中的时间重叠的记录方法:A --创建临时表&#xff0c;里面有重叠的日期declare t table (Name varchar(100), starttime datetime, endtime datetime); insert into t values(A , 2017-01-02 00:00 , 2017-03-28 00:10),(A , 2017-05-14 23:50 , 2017-05-29 23…

Java判断多个时间段是否重叠

因为项目需求用到比较给定时间段是否与已知时间段有重叠&#xff0c;所以写了一个比较简单易懂的方法&#xff0c;经测试可以满足本人目前的需求&#xff0c;大家如果发现该方法有什么问题可以提出来&#xff0c;如果有更好的方法也可以分享。 package com.demo;import java.u…

SQL中如何求解时间重叠的问题?

点击上方SQL数据库开发&#xff0c;关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 问题描述 时间重叠指上下两行数据的时间段有重叠部分&#xff0c;现在要找出这些在时间上有重叠的记录。 具体问题 有7个会议室&#xff0c;每个会议室每天都有人开…

多个日期时间段进行合并计算时长,剔除重叠时间段

多个日期时间段进行合并&#xff0c;算出经历的时长_itrytellyou的博客-CSDN博客_多个时间段合并多个日期时间段进行合并&#xff0c;算出经历的时长背景描述思路代码背景描述在公司进行人员描图模块开发时&#xff0c;涉及到了人员参会时长和参会次数的数据&#xff0c;比如一…

【js】判断时间段之间是否有重叠

一、需求 可以有多个时间段&#xff08;hh:mm&#xff09;&#xff0c;添加下一个时间段以及提交时需要判断各个时间段不能交叉&#xff0c;如下图&#xff1a; 一、方法 let dateAr [{ s: 02:00, e: 03:00 },{ s: 03:00, e: 04:01 },{ s: 05:00, e: 06:00 },{ s: 07:00, e:…

SQL中的时间重叠问题

点击关注上方“SQL数据库开发”&#xff0c; 设为“置顶或星标”&#xff0c;第一时间送达干货 SQL专栏 SQL基础知识第二版SQL高级知识第二版 问题描述 时间重叠指上下两行数据的时间段有重叠部分&#xff0c;现在要找出这些在时间上有重叠的记录。 具体问题 有7个会议室&#…

判断两个时间段交集、时间重叠问题

判断两个时间段范围是否有交集(时间重叠)问题经常遇到&#xff0c;比如预约会议室开会&#xff0c;活动的开始结束等&#xff0c;本文做此分析。 前提&#xff1a;本文时间传参已做限制&#xff0c;结束时间必须大于开始时间 1、正向思维 代码如下 (oneStartTime < other…

判断时间范围是否重叠(原理)

首先问题来源&#xff1a;因为业务需求需要在前端设置一个时间范围&#xff0c;并且可以多次增加&#xff0c;但要保证时间范围不重叠。某一个时间范围内做特定的事情。 让我们来分析一下时间重叠有几种情况 第一种情况&#xff1a;R1的开始时间在R2时间范围内 图① 第二种情…

企业物联网平台如何选择?

物联网平台的考虑因素都有哪些&#xff1f; 通常&#xff0c;物联网平台在安全功能、协议、数据格式、数据分析和可视化能力&#xff0c;以及所提供的应用环境方面进行比较。有很多物联网平台&#xff0c;它们可能拥有全套功能&#xff0c;但可能仍然无法胜任客户任务需求。一…

物联网技术,主要包括哪些核心技术

物联网的关键技术有识别和感知技术&#xff0c;网络与通信技术&#xff0c;数据挖掘与融合技术。 1.识别和感知技术 最常见的就是生活的的二维码了。 通过二维码&#xff0c;我们可以和图片&#xff0c;网址&#xff0c;软件&#xff0c;整个世界联系起来。 2.网络与通信技…

什么是物联网平台

1、什么是物联网平台 阿里云物联网平台为设备提供安全可靠的连接通信能力&#xff0c;向下连接海量设备&#xff0c;支撑设备数据采集上云&#xff1b;向上提供云端API&#xff0c;服务端通过调用云端API将指令下发至设备端&#xff0c;实现远程控制。 物联网平台消息通信流程…

物联网是什么,和互联网之间主要有什么区别

物联网概念最早可追溯到1990年&#xff0c;但当时并未引起重视。而随着互联网的普及、科技的发展&#xff0c;物联网在近年来备受关注&#xff0c;并成为一个新经济增长点的战略新兴产业。 物联网(InternetofThings)&#xff0c;顾名思义就是"物物相连的互联网";更为…

物联网的应用领域有哪些?

智能仓储 目前&#xff0c;国内最成熟的智能仓储解决方案智能仓储解决方案&#xff0c;智能仓储是物流过程的一个环节&#xff0c;智能仓储的应用&#xff0c;保证了货物仓库管理各个环节数据输入的速度和准确性&#xff0c;确保企业及时准确地掌握库存的真实数据&#xff0c;…