在介紹訓(xùn)練場的OJ系統(tǒng)之前,首先為大家介紹一下ACM:
ACM原代表美國計算機(jī)協(xié)會,因其舉辦的ICPC即國際大學(xué)生程序設(shè)計競賽而聞名全世界,此項賽事要求學(xué)生的在五小時內(nèi)解決全英文問題,并在效率和速度以及代碼的審查上要求非常嚴(yán)格以至近乎苛刻,被譽(yù)為是計算機(jī)界的“奧林匹克”。在大學(xué)中,因其含金量、認(rèn)可度等非常之高,故而在大學(xué)生名企就業(yè)、保研、留學(xué)等方面都有著極大的幫助。ACM也因其獨有的比賽趣味也在今天的高校中也得到了廣泛的推廣,許多大學(xué)生都為之著迷、甚至大學(xué)四年都為之獻(xiàn)身。足以說明ACM的魅力所在。
OJ簡介:
ACM比賽中主要以O(shè)J(即Online Judge)判題為主,用來在線檢測程序的正確性。OJ采用后臺黑箱測試,測試數(shù)據(jù)非常全面,涵蓋各種特殊情況。并且在結(jié)果的比對上也不放過一個空格和回車,這就要求程序員要有非常嚴(yán)謹(jǐn)?shù)乃季S。著名的OJ有POJ、HOJ、UVA等。
輕量級入門OJ? ACM訓(xùn)練平臺:http://www.sztianhecheng.cn
在各大OJ的ACM比賽賽題上,往往都會給出問題的描述(Description)、問題的輸入和輸出要求,并會給出幾組樣例數(shù)據(jù)。所以選手要在完全理解的基礎(chǔ)上至少通過了樣例數(shù)據(jù)才再提交代碼。
下面我們介紹幾種常見的輸入輸出格式。
A+B Ⅰ
這種輸入的典型題目就是A+Bhttp://www.sztianhecheng.cn/oj/problem1085.html
此題只要求用戶求A+B的和,但此類題目往往說明測試數(shù)據(jù)有多組。則默認(rèn)是到文件(后臺測試用例在文件里)末尾結(jié)束。我們則可以采用循環(huán)的方式不斷接收測試用例,并且每接收一組輸出一組(不必全部輸入再全部輸出,因為OJ只比對一次最后的結(jié)果)。
參考C代碼:
#include<stdio.h> int main() { int a,b; while(scanf(“%d%d”,&a,&b)==2) //利用scanf的返回值 { printf(“%d\n”,a+b); } return 0; }
A+BⅡ
依然是A+B,我們可以看一下這道題http://www.sztianhecheng.cn/oj/problem1086.html
依然是求A+B,但它的輸入數(shù)據(jù)為:
2
1 5
10 20
輸出為:
6
30
此題相比第一道而言,會提前告訴你是幾組數(shù)據(jù),第一行的2就表示有兩組數(shù)據(jù)。則此時我們可以考慮這樣寫:
#include<stdio.h> int main() { int n; int a,b; scanf("%d",&n); while(n--) { scanf("%d%d",&a,&b); printf("%d\n",a+b); } return 0; }
A+B Ⅲ
繼續(xù)是A+B,不同的是題目中說明,有多組數(shù)據(jù),但是以A和B都為0時結(jié)束,則此時,就要做判斷。不能依然輸出0。
http://www.sztianhecheng.cn/oj/problem1087.html
參考答案:
#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; }
A+B Ⅳ
題目描述:此類題目是求n個數(shù)的和,輸入為先輸入一個數(shù)組n,然后后面跟n個數(shù)字,求這n個數(shù)字的和。同樣有多組數(shù)據(jù),當(dāng)n=0時結(jié)束。題目鏈接http://www.sztianhecheng.cn/oj/problem1088.html
樣例輸入:
4? 1 2 3 4
5 1 2 3 4 5
0
樣例輸出:
10
15
參考寫法:
#include<stdio.h> int main() { int n; int sum,temp; while(scanf("%d",&n) && n) { sum=0; while(n--) { scanf("%d",&temp); sum+=temp; } printf("%d\n",sum); } return 0; }
總結(jié):
常見的ACM的輸入輸出格式如這些。
多組數(shù)據(jù)可能還會用到EOF、NULL這些宏。比如scanf、getchar、gets的返回值。
萬變不離其宗,有些題目可能是這些格式的組合,亦或者是個別情況的變種,比如輸出格式要求的變化等等,就需要各位ACMer靈活多變了。
DJTU2012年退役Acmer
C語言研究中心(www.sztianhecheng.cn)