編程挑戰系統的輸入和輸出詳細說明

在高校俱樂部線上編程挑戰中,一道題目的所有測試數據是放在一個文本文件中,選手將一道題目的程序提交給評判系統運行,程序從該文件中讀取測試數據,再把運行結果輸出到另一個文本文件中。系統把輸出文件與標準答案比對,來評判程序編寫得正確與否。

本系統采用標準的輸入輸出,輸入結束有文件末尾標識(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.pswp.cn/news/373888.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373888.shtml
英文地址,請注明出處:http://en.pswp.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&#…