编程挑战系统的输入和输出详细说明

在高校俱乐部线上编程挑战中,一道题目的所有测试数据是放在一个文本文件中,选手将一道题目的程序提交给评判系统运行,程序从该文件中读取测试数据,再把运行结果输出到另一个文本文件中。系统把输出文件与标准答案比对,来评判程序编写得正确与否。

本系统采用标准的输入输出,输入结束有文件末尾标识(EOF),这可以用于确定输入结束。

 

一、四种基本输入形式

 

1.      一组输入数据

示例:整数求和

描述

给定两个整数,求它们之和。

输入

两个整数A,B.

输出

两个整数的和。

样例输入

1 2

样例输出

3

 

在此列出用C/C++语言的答题示例如下:

C语法:

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


注意:输入前不要打印提示信息。输出完毕后立即终止程序,不要等待用户按键。

 

C++语法:

#include<iostream>using namespace std;int main(){int a ,b;cin>>a>>b;cout<<a+b<<endl;return 0;}


 

Java语法:

import java.util.*;public class Main{public static void main(String [] args){Scanner cin = new Scanner(System.in);int a = cin.nextInt();int b = cin.nextInt();System.out.println(a+b);cin.close();}}


 

C#语法:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{class Program{static void Main(string[] args){string[] ss = Console.ReadLine().Split();Console.WriteLine(int.Parse(ss[0]) + int.Parse(ss[1]));}}}


 

2.      多组输入数据,不说明多少组,直到读至输入文件末尾为止

示例:整数求和

描述

给定两个整数,求它们之和。

输入

输入由一系列包含两个整数的数组构成,由两个数字由空格分开,一行一组数据

输出

针对每组输入数据,输出之和

样例输入

2 7

样例输出

9

 

在此列出用C/C++语言的答题示例如下:

C语法:

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


说明:scanf函数返回值就是读出的变量个数,如:scanf( “%d %d”, &a, &b );如果只有一个整数输入,返回值是1,如果有两个整数输入,返回值是2,如果一个都没有,则返回值是EOF。EOF是一个预定义的常量,等于-1

 

C++语法:

#include<iostream>using namespace std;int main(){int a ,b;while (cin>>a>>b)cout<<a+b<<endl;return 0;}


cin是一个对象,表达式cin >> m >> n在读入发生错误返回0,否则返回cin的地址。

 

Java语法:

import java.util.*;public class Main{public static void main(String [] args){Scanner cin = new Scanner(System.in);int a ,b;while(cin.hasNext()){a= cin.nextInt();b=cin.nextInt();System.out.println(a+b);}cin.close();}}


 

C#语法:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{class Program{static void Main(string[] args){string line;while ((line = Console.ReadLine()) != null){string[] ss = line.Split();Console.WriteLine(int.Parse(ss[0]) + int.Parse(ss[1]));}}}}


 

3.      多组输入数据,不说明多少组,以某特殊输入为结束标志

示例:整数求和

描述

给定两个整数,求它们之和。

输入

输入由一系列包含两个整数的数组构成,由空格分开,一行一组数据。最后一行为0 0,且不做运算处理;

输出

针对每组输入数据,输出之和

样例输入

2 7

1 6

0 0

样例输出

9

 

在此列出用C/C++语言的答题示例如下:

C语法:

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


 

C++语法:

#include<iostream>using namespace std;int main(){int a ,b;while(cin>>a>>b&&(a||b)){cout<<a+b<<endl;}return 0;}


 

Java语法:

import java.util.*;public class Main{public static void main(String [] args){Scanner cin = new Scanner(System.in);int a ,b;while(cin.hasNext()){a= cin.nextInt();b=cin.nextInt();if(a==0&&b==0)break;System.out.println(a+b);}cin.close();}}


 

C#语法:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{class Program{static void Main(string[] args){string line;int a, b;while ((line = Console.ReadLine()) != null){string[] ss = line.Split();a=int.Parse(ss[0]);b=int.Parse(ss[1]);if (a == 0 && b == 0) break;Console.WriteLine(a+b);}}}}


 

4.      多组输入数据,开始输入一个N,接下来是N组数据

示例:整数求和

描述

给定两个整数,求它们之和。

输入

输入数据每行由N开头,

输入由一系列包含两个整数的数组构成,由空格分开,一行一组数据。第一行为N,表明后续数组的个数;

输出

针对每组输入数据,输出之和

样例输入

2

1 6

5 3

样例输出

7

8

 

在此列出用C/C++语言的答题示例如下:

C语法:

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


 

C++语法:

#include<iostream>using namespace std;int main(){int a ,b,n;cin>>nwhile(n--){cin>>a>>b;cout<<a+b<<endl;}return 0;}


 

Java语法:

import java.util.*;public class Main{public static void main(String [] args){Scanner cin = new Scanner(System.in);int a ,b,n=cin.nextInt();;while((n--)>0){a= cin.nextInt();b=cin.nextInt();System.out.println(a+b);}cin.close();}}


 

C#语法:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{class Program{static void Main(string[] args){int n = int.Parse(Console.ReadLine());while ((n--)>0){string[] ss = Console.ReadLine().Split();Console.WriteLine(int.Parse(ss[0]) + int.Parse(ss[1]));}}}}


 

二、字符串输入

对字符串的输入分三种情况:

 

1.      每个字符串中不含空格、制表符及回车

这种情况,用scanf("%s",str)是再好不过的了,比如,测试数据中只有两个字符串:abc def

要读入abc与def,可以这样写:

char str1[1000], str2[1000];

scanf("%s%s", str1, str2);

 

2.      字符串中含有空格、制表符,但不含回车

对于这种情况,scanf("%s",str)无能为力,因为scanf用空格、制表符及回车作为字符串的分界符。对于一个含有空格、制表符及回车的字符串,如果用scanf("%s",str)来读,将读到若干个字符串,这个字符串被scanf分开了。

可以用另外一个函数gets。gets函数用回车作为字符串的分界符,比如,有以下的一个字符串:

Hello world!

要读入这个字符串,这样写:

char str[1000];

gets(str);

这样,str的内容就是"Hello world!"了。另外,gets返回NULL表示出错或end of file。

 

3.      字符串中含回车

在这种情况下,如果没有题目的说明,程序无法知道哪里是字符串的分界。那么,用scanf("%c",&ch)来读,一边读,一边判断分界条件是否满足,如果满足,则把当前读到的东西存到一个字符串中。

 

三、输出处理

在初次接触ACM程序设计竞赛时,可能认为:样例中都是输入数据和输入数据在一起,输出结果和输出结果在一起,可能会开个数组,把每组的结果存起来,等输入完了再一起输出。当遇到不知有多少组测试数据的题,就难以处理了。

在高校俱乐部线上编程挑战中,输入数据和输出数据是分别在两个不同的文件中进行的,程序的输入和输出是相互独立的,所以读入一组数据就输出一组结果,跟先读入所有数据再输出所有的结果,效果是完全一样的。因此,每当处理完一组测试数据,就应当按题目要求进行相应的输出操作。而不必将所有结果储存起来一起输出。在处理输出时,一般要注意:每行输出均以回车符结束,包括最后一行。

 

1.      关于空行(Blank line)

很多题目都要求在输出数据的恰当位置加空行。一个空行就是一个单独的"\n"。这里,有的题目说:“After each test case, you should output one blank line”,而有的题目说:“Between each test case, you should ouput one blank line”。要注意After和Between的区别,因为如果多了一或少了空行,将导致Presentation Error甚至Wrong Answer。

(1)    After

这种情况最简单,只需要输出结果后,再加一个printf("\n")或puts("")就行了,就像这样:

int i;for (i = 0; i < 10; i++){printf("%d\n", a);printf("\n");}


 

在此列出用C/C++语言的答题示例如下:

示例:整数求和

描述

给定几个整数,求它们之和。

输入

输入包含多个测试用例。每个测试用例包含N+1个整数,第一位为整数N,后面跟随N个整数;

最后一行第一位数字为0,此行不做运算处理。

输出

对每一行输入数据求和;最后一行输出空行

样例输入

4 1 2 3 4

5 1 2 3 4 5

0

样例输出

10

15

 

程序示例:

C语法:

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


C++语法:

#include<iostream>using namespace std;int main(){int n,sum,a;while(cin>>n&&n){sum=0;while(n--){cin>>a;sum+=a;}cout<<sum<<endl;cout<<endl;}return 0;}


 

Java语法:

import java.util.*;public class Main{public static void main(String [] args){Scanner cin = new Scanner(System.in);int x,n,sum;while(cin.hasNext()){n= cin.nextInt();if(n<=0)break;sum=0;while((n--)>0){x=cin.nextInt();sum+=x;}System.out.println(sum);}cin.close();}}


 

C#语法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication2
{class Program{static void Main(string[] args){string line;int n,sum;while ((line = Console.ReadLine()) != null){n = int.Parse(line);if (n <= 0) break;sum = 0;string[] ss = Console.ReadLine().Split();for (int i = 0; i < n; ++i){sum += int.Parse(ss[i]);}Console.WriteLine(sum);}}}
}


 

(2)    Between

Between和After不同的是,最后一组结果后面不应该再加单独的"\n",应该像这样:

int i;for (i = 0; i < 10; i++){printf("%d\n", a);if (i != 9)printf("\n");}


由于有时候我们并不知道测试数据有几组(比如测试数据是以end of file 结束的),用上面的方法就不行了,于是,可以换一种写法:

int a;bool bFirst = true;while (scanf("%d", &a) == 1){if (!bFirst)puts("");elsebFirst = false;printf("%d\n", a);}


这样,从第二组测试数据起,在输出每组测试数据的结果之前就会输出一个空行,和想要的效果是一样的。

 

2.      关于空格、逗号以及其他分隔符

这种情况与空行的情况相当相似,处理方法也是一样的,只不过把"\n"改成相应的分隔符就行了。

 

3.      带格式的字符串输出

有些题目要求输出这样的字符串

abc*****de****f

其中“*”代表空格。

要求是这样的:str1在前5个字符中左对齐,str2在第6到第10个字符中右对齐,str3在第11到第15个字符中右对齐。

可行的做法是,先初始化一个数组,用' '(空格)填充,再在相应的位置填相应的内容。用程序来表述:

01:char str[1000];

02:char str1[] = "abc", str2[] = "de", str3[] = "f";

03:memset(str, ' ', 1000 * sizeof(char));

04:sprintf(str, "%s", str1);

05:str[strlen(str1)] = ' ';

06:sprintf(str + 5, "%5s", str2);

07:str[10] = ' ';

08:sprintf(str + 10, "%5s", str3);

09:str[15] = '\0';

10:puts(str);

关键的部分:

(1)在调用sprintf后,要清除不恰当字符串结束符(第5,7行);

(2)在恰当的位置添加字符串结束符(第9行)。

 

4.      二维数组的输出

首先要考虑的是数组是按行排列还是按列排列,如果是按行排列,就应该这样写:

int i, j;

01: for (i = 0; i < nRow; i++)

02: {

03:    for (j = 0; j < nCol; j++)

      {

        if (j > 0)

          printf(" ");

        printf("%d", a[j]);

       }

       puts("");

   }

如果是按列,就要把1行和3行交换。


 来源:http://student.csdn.net/mcd/topic/235300/758992

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上传文件---未能找到路径“D:\MyProject\Files\”的一部分

C# 使用控件FileUpload 上传文件&#xff0c;简单实例&#xff1a; protected void btnUpload_Click(object sender, EventArgs e){string path Server.MapPath("~/Files/");if (fileUpload.HasFile true){string filename fileUpload.FileName.ToLower();fileUpl…

使用SPANN方式将Spring&Quartz与自定义注释集成

在上一篇文章中 &#xff0c;我们演示了如何在Spring容器中创建和配置带批注的Quartz作业。 我们使用了一个类级别的注释将一些元数据添加到实现Quartz Job的bean中。 批注定义了作业的名称&#xff0c;组及其cron表达式。 后来&#xff0c;大部分代码专用于处理该批注&#xf…

python opencv旋转_Python opencv实现与rotatedrect类似的矩形旋转,pythonopencv,RotatedRect

本文原理&#xff1a;先旋转矩形到指定角度&#xff0c;然后提取矩形外轮廓&#xff0c;从而获取旋转后的矩形坐标点。#&#xff01;/usr/bin/env python3# -*- coding: utf-8 -*-# Author: tcy# Date: 2020-5-2 21:00:53# Version:V1.01# Last Modified by: tcy shanghai song…

关于string转整数

又是leetcode的easy级别题&#xff0c;很基本的题目&#xff0c;却漏考虑很多情况&#xff0c;动手前一定要考虑清楚呀&#xff01;&#xff01;&#xff01; 就当做锻炼写作能力吧&#xff0c;先上题目&#xff01; 将文本转换成整数&#xff0c;注意一下几点&#xff1a; 1.文…

数字三角形——递归、递推、记忆化搜索

数字三角形 描述: 有一个由非负整数组成的三角形&#xff0c;第一行只有一个数&#xff0c;除了最下行之外每个数的左下方和右下方各有一个数。 问题&#xff1a; 从第一行的数开始&#xff0c;每次可以往左下或右下走一格&#xff0c;直到走到最下行…

Java 7功能概述

前面我们讨论了所有未纳入Java 7的内容&#xff0c;然后回顾了将其纳入Java 7的有用的Fork / Join框架 。 今天的帖子将带我们了解Project Coin的每个功能-一系列小的语言增强功能&#xff0c;这些功能虽然不是开创性的&#xff0c;但是对于任何能够使用JDK 7的开发人员来说都是…

缓存技术

提升系统性能的主要方式之一就是缓存。它可以挡掉大部分的数据库访问的冲击&#xff0c;如果没有它&#xff0c;系统很可能会因为数据库不可用导致整个系统崩溃。 但是缓存带来了另外一些棘手的问题&#xff1a; 数据的一致性和实时性。 例如&#xff0c;数据库中的数据状态已经…

水晶报表分组分栏_web报表可视化设计器工具推荐

古往今来&#xff0c;信息就是决胜的关键。在科技时代的今天亦是如此。企业的数据管理在帮助企业加强管控、提高竞争力等方面具有不可或缺的作用。这就不得不说到报表工具。企业想要将储存于各种商业信息系统中的数据转化成有用的信息&#xff0c;最终帮助决策者做出更快、更好…

嵌套矩形——DAG上的动态规划

有向无环图&#xff08;DAG,Directed Acyclic Graph&#xff09;上的动态规划是学习动态规划的基础。很多问题都可以转化为DAG上的最长路、最短路或路径计数问题。 题目描述&#xff1a; 有n个矩形&#xff0c;每个矩形可以用两个整数a,b描述&#xff0c;表示它的长和宽。矩形…

Twisted

Twisted定义Twisted是一个基于事件驱动的网络引擎框架网络框架&#xff0c;别人预先定义好的一个框架&#xff08;一个项目&#xff09;&#xff0c;如.net某个web框架有25个class&#xff0c;从BeginRequest依次执行类里的process方法&#xff0c;程序员自己定义一个类&#x…

从Spring到Java EE 6

我最近在一个非常复杂的项目中工作&#xff0c;其中融合了许多Java EE 6技术&#xff08;例如JPA&#xff0c;JAXB&#xff0c;JMS&#xff0c;JTA&#xff0c;JAX-RS等&#xff09;。 出于生产力和计划方面的原因&#xff0c;将原型应用程序设计为独立的纯Spring应用程序。 当…

Centos 6.5 搭建php环境(nginx+mariadb+php7)

1.mariaDb vim /etc/yum.repos.d/MariaDB.repo [mariadb] name MariaDB baseurl http://yum.mariadb.org/5.5/centos5-x86 gpgkeyhttps://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck1#如果服务器已经安装了MariaDB-Galera-server包&#xff0c;你可能需要在安装MariaDB-s…

MAC itunes无法验证服务器s.mzstatic/itunes无法更新服务器解决方案

打开host文件&#xff1a; 一、用终端打开&#xff1a; sudo vi /etc/hosts 输入完这行命令后需要输入电脑密码&#xff0c;然后确认&#xff0c;进入host文件 然后按i键进入编辑模式&#xff0c;在最后一行添加&#xff1a;23.214.233.166 s.mzstatic.com 如下图 添加完后&…

硬币问题——固定终点的最长路和最短路

问题描述&#xff1a; 有n种硬币&#xff0c;面值分别为V1,V2...,Vn,每种都有无限多。给定非负整数S&#xff0c;可以选用多少个硬币&#xff0c;使得面值之和恰好为S&#xff1f;输出硬币数目的最小值和最大值。0 < n < 100, 0 < S < 10000, 1 < Vi < S。 …

读取nas_NAS怎么玩?除了存放小姐姐,它竟然还有这些功能

自从有了电脑&#xff0c;就一直在折腾"存储那点事儿"&#xff0c;说到底&#xff0c;电脑的本质就是存储&#xff0c;而自己弄家用存储方面的东西算下来也有几年了。单机的硬盘存储比较简单&#xff0c;但是随着家里各种设备的增多&#xff0c;各个设备间的文件共享…

ZK Web框架思想

我曾多次被要求提出一些有关ZK的意见。 因此&#xff0c;根据我作为ZK用户4年的经验&#xff0c;以下是一些想法&#xff1a; 总体开发人员经验&#xff0c;社区和文档 “就是这样” ZK提供的大多数东西都能很好地工作&#xff0c;并且如果您以前开发过任何桌面Java应用程序&…

OC第一讲:类和对象

今天终于开始进行OC的学习了 一.首先讲了NSLog NSLog是oc里面的输出语句&#xff0c;其用法和printf差不多&#xff0c;但是还是有差别的 1&#xff0c;NSLog是自动换行的&#xff0c;不用像printf那样还需要加\n&#xff1b; 2&#xff0c;NSLog在引号面前需要添加符号&#x…

【转载】关于 Google Chrome 中的全屏模式和 APP 模式

【来源于】新浪微博&#xff1a;阿博 http://www.cnblogs.com/abel/p/3235839.html 全屏模式&#xff1a;kiosk 默认全屏打开一个网页呢&#xff0c;只需要在快捷方式中加上 --kiosk [url] 就可以了。 关于全屏模式&#xff1a; 1、全屏模式下&#xff0c;广告插件&#xff08;…

PL/SQL Developer跑在Oracle 64位数据库上初始化错误

安装完Oracle(64位)、PL/SQL Developer后运行PL/SQL出现如下的错误&#xff1a; 网上查资料说&#xff0c;我的PL/SQL Developer与ORACLE不兼容&#xff0c;即PL/SQL不支持64位的ORACLE&#xff0c;因此得下一个32位的ORCALE客户端并配置相应的参数&#xff1a; 解决步骤小记&a…

gis 联合 融合_GIS技术进化 | 我们为何需要跨平台GIS技术体系?

10月30日&#xff0c;超图在2019 GIS 软件技术大会上发布了SuperMap GIS 10i系列产品。SuperMap GIS 10i全面融入人工智能(AI)技术&#xff0c;创新并构建了GIS基础软件“BitCC”五大技术体系&#xff0c;即大数据GIS、人工智能GIS、新一代三维GIS、云原生GIS和跨平台GIS&#…