Pascal字符串的運用_第1頁
Pascal字符串的運用_第2頁
Pascal字符串的運用_第3頁
Pascal字符串的運用_第4頁
Pascal字符串的運用_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、第一講 字符串的應(yīng)用1導(dǎo)入在歷年的信息學(xué)奧賽中,字符串的操作已經(jīng)是考察的熱點,比如近兩年來提高組的分區(qū)聯(lián)賽試題中的第一題都考察到了字符串的操作,應(yīng)該是大家著重掌握的內(nèi)容之一。幾點熟練掌握的要求1:熟練掌握從文件中讀入字符串并且進行處理的技巧;2:熟練掌握字符串的各種函數(shù)和過程的運用。3:能熟練運用字符和數(shù)字之間的轉(zhuǎn)化;2乒乓球【問題背景】國際乒聯(lián)現(xiàn)在主席沙拉拉自從上任以來就立志于推行一系列改革,以推動乒乓球運動在全球的普及。其中11分制改革引起了很大的爭議,有一部分球員因為無法適應(yīng)新規(guī)則只能選擇退役。華華就是其中一位,他退役之后走上了乒乓球研究工作,意圖弄明白11分制和21分制對選手的不同影響

2、。在開展他的研究之前,他首先需要對他多年比賽的統(tǒng)計數(shù)據(jù)進行一些分析,所以需要你的幫忙。【問題描述】華華通過以下方式進行分析,首先將比賽每個球的勝負(fù)列成一張表,然后分別計算在11分制和21分制下,雙方的比賽結(jié)果(截至記錄末尾)。比如現(xiàn)在有這么一份記錄,(其中W表示華華獲得一分,L表示華華對手獲得一分):3在11分制下,此時比賽的結(jié)果是華華第一局11比0獲勝,第二局11比0獲勝,正在進行第三局,當(dāng)前比分1比1。而在21分制下,此時比賽結(jié)果是華華第一局21比0獲勝,正在進行第二局,比分2比1。如果一局比賽剛開始,則此時比分為0比0。你的程序就是要對于一系列比賽信息的輸入(WL形式),輸出正確的結(jié)果。

3、【輸入格式】每個輸入文件包含若干行字符串(每行至多20個字母),字符串有大寫的W、L和E組成。其中E表示比賽信息結(jié)束,程序應(yīng)該忽略E之后的所有內(nèi)容?!据敵龈袷健枯敵鲇蓛刹糠纸M成,每部分有若干行,每一行對應(yīng)一局比賽的比分(按比賽信息輸入順序)。其中第一部分是11分制下的結(jié)果,第二部分是21分制下的結(jié)果,兩部分之間由一個空行分隔。4算法分析 首先,對當(dāng)前輸入行計算11分制下每一局比賽的比分。設(shè) a為當(dāng)前局華華的得分,每輸入一個W,a+1;b為當(dāng)前局對方的得分,每輸入一個L,b+1。若輸入E或者華華的得分a或者對方得分b達(dá)到11分且雙方的分?jǐn)?shù)差值大于1((a11) or(b11)and (abs(a

4、-b)1)),則輸出當(dāng)前局的比分a:b。請注意,如果輸入的字符為E,則標(biāo)志比賽結(jié)束,11分制計算完畢;否則,繼續(xù)讀下一個字符,計算新一局的比分。然后,對當(dāng)前輸入行計算21分制下每一局比賽的比分。計算方法基本如上。有所不同的是,若華華得分a或者對方得分b達(dá)到21分且雙方的分?jǐn)?shù)差值大于1((a21) or(b21)and (abs(a-b)1)),則輸出當(dāng)前局的比分a:b。 按照上述方法對每一輸入行計算11分制和21分制的比賽結(jié)果,直至文件讀完(eof(input))為止。5 assign(input,inp); reset(input);輸入文件讀準(zhǔn)備 assign(output,out);re

5、write(output);輸出文件寫準(zhǔn)備 a:=0;b:=0; 當(dāng)前局雙方的比分初始化 while not eof (input) do若文件未讀完,則循環(huán) begin while not eoln(input) do若當(dāng)前行處理完,則11分制的比賽結(jié)束 begin read(ch);讀一個字符 case ch of根據(jù)字符的種類分情形處理 E: begin若比賽結(jié)束,則輸出雙方比分 writeln(a,:,b); break;退出11分制的計算過程 end; E W,L: begin華華或?qū)Ψ降靡环?if ch=Wthen inc(a) else inc(b); if (a=11)or(b

6、=11) and (abs(a-b)1) then若有一方得分達(dá)到11分且雙方的分?jǐn)?shù)差值大于1,則輸出雙方比分 begin writeln(a,:,b); 6 a:=0;b:=0;新一局的比分初始化 end;then end; W,L end;case end;while readln; end; while a:=0; b:=0; 新一局的比分初始化 writeln; reset(input);重新讀輸入行 while not eof(input) do若文件未讀完且比賽未結(jié)束,則循環(huán) begin while not eoln(input) do若當(dāng)前行處理完,則21分制的比賽結(jié)束 begi

7、n read(ch);讀一個字符 7case ch of根據(jù)字符的種類分情形處理 E:begin若比賽結(jié)束,則輸出雙方比分,退出21分制的計算過程 writeln(a,:,b); break; end; EW,L: begin華華或?qū)Ψ降靡环?if ch=Wthen inc(a) else inc(b); if (a=21)or(b=21) and (abs(a-b)1) 若有一方得分達(dá)到21分且雙方的分?jǐn)?shù)差值大于1,則輸出雙方比分 then begin writeln(a,:,b); a:=0;b:=0;新一局的比分初始化 end;then end; W,L end;case end;whi

8、le readln;end;whileclose(input); close(output);關(guān)閉輸入文件和輸出文件 關(guān)鍵是文件操作。如果在計算21分制的得分前,不會通過reset(input)將讀頭移到文件首,則會出錯!8誰拿了最多獎學(xué)金【問題描述】某校的慣例是在每學(xué)期的期末考試之后發(fā)放獎學(xué)金。發(fā)放的獎學(xué)金共有五種,獲取的條件各自不同:1)院士獎學(xué)金,每人8000元,期末平均成績高于80分(80),并且在本學(xué)期內(nèi)發(fā)表1篇或1篇以上論文的學(xué)生均可獲得;2)五四獎學(xué)金,每人4000元,期末平均成績高于85分(85),并且班級評議成績高于80分(80)的學(xué)生均可獲得;3)成績優(yōu)秀獎,每人2000元

9、,期末平均成績高于90分(90)的學(xué)生均可獲得;4)西部獎學(xué)金,每人1000元,期末平均成績高于85分(85)的西部省份學(xué)生均可獲得;5)班級貢獻獎,每人850元,班級評議成績高于80分(80)的學(xué)生干部均可獲得; 只要符合條件就可以得獎,每項獎學(xué)金的獲獎人數(shù)沒有限制,每名學(xué)生也可以同時獲得多項獎學(xué)金。例如姚林的期末平均成績是87分,班級評議成績82分,同時他還是一位學(xué)生干部,那么他可以同時獲得五四獎學(xué)金和班級貢獻獎,獎金總數(shù)是4850元。 現(xiàn)在給出若干學(xué)生的相關(guān)數(shù)據(jù),請計算哪些同學(xué)獲得的獎金總數(shù)最高(假設(shè)總有同學(xué)能滿足獲得獎學(xué)金的條件)。9【輸入文件】輸入文件scholar.in的第一行是一

10、個整數(shù)N(1N100),表示學(xué)生的總數(shù)。接下來的N行每行是一位學(xué)生的數(shù)據(jù),從左向右依次是姓名,期末平均成績,班級評議成績,是否是學(xué)生干部,是否是西部省份學(xué)生,以及發(fā)表的論文數(shù)。姓名是由大小寫英文字母組成的長度不超過20的字符串(不含空格);期末平均成績和班級評議成績都是0到100之間的整數(shù)(包括0和100);是否是學(xué)生干部和是否是西部省份學(xué)生分別用一個字符表示,Y表示是,N表示不是;發(fā)表的論文數(shù)是0到10的整數(shù)(包括0和10)。每兩個相鄰數(shù)據(jù)項之間用一個空格分隔?!据敵鑫募枯敵鑫募cholar.out包括三行,第一行是獲得最多獎金的學(xué)生的姓名,第二行是這名學(xué)生獲得的獎金總數(shù)。如果有兩位或兩

11、位以上的學(xué)生獲得的獎金最多,輸出他們之中在輸入文件中出現(xiàn)最早的學(xué)生的姓名。第三行是這N個學(xué)生獲得的獎學(xué)金的總數(shù)。 10算法分析 難度分析:本題的算法是直敘式模擬,屬于一道簡單的數(shù)理統(tǒng)計題,毋需建立與問題對應(yīng)的數(shù)學(xué)模型。唯一的難點就是輸入數(shù)據(jù)的處理,因為每行的數(shù)據(jù)既包括字串,又包括數(shù)值,需要選手清晰地甄別和處理不同類型的數(shù)據(jù)。 11用一個紀(jì)錄型數(shù)組、或者多個不同類型的數(shù)組記錄所有學(xué)生的信息。計算出獲得最多獎金的學(xué)生并不一定要先記錄下所有學(xué)生的信息,而是通過依次統(tǒng)計每個學(xué)生獎金的辦法亦可以達(dá)到這個目的。在依次讀一個學(xué)生的諸方面信息時,同一數(shù)據(jù)類型的信息用一條read語句讀入,每個學(xué)生的最后一條信息

12、用readln語句讀入。我們在讀完一行數(shù)據(jù)后就可統(tǒng)計其獎金數(shù)了,并調(diào)整目前獲獎金最多的學(xué)生信息。注意,記錄獎金總數(shù)的變量必須采用Longint類型(為什么)。 12var name,nn:array 1.30 of char;獲得最多獎金的學(xué)生姓名為name;當(dāng)前學(xué)生姓名為nn n,i,j,tot,max,x,m1,m2,u:longint; b1,b2,ch:char;begin assign(input,scholar.in); reset(input); readln(n); 讀學(xué)生數(shù) tot:=0;max:=0;fillchar(name,sizeof(name), ); for i:

13、=1 to n do讀入每位學(xué)生的數(shù)據(jù) begin fillchar(nn,sizeof(nn), );j:=0;讀第i位學(xué)生的姓名nn repeat read(ch); if ch= then break; inc(j);nnj:=ch until false; read(m1,m2); 讀第i位學(xué)生的期末平均成績和班級評議成績、是否是學(xué)生干部和是否是西部省份學(xué)生的信息 repeat read(b1) until (b1=Y) or (b1=N); repeat read(b2) until (b2=Y) or (b2=N);13 readln(u);讀發(fā)表的論文數(shù) x:=0;累計第i位學(xué)生的獎金 if (m180) and (u=1) then x:=x+8000; if (m185) and (m280) then x:=x+4000; if (m190) then x:=x+2000; if (m185) and (b2=Y) then x:=x+1000; if (m180) and (b1=Y) then x:=x+850; tot:=tot+x; 累計前i位學(xué)生的獎金總數(shù) if xmax若第i位學(xué)生的獎金最多,則調(diào)整max并記下其名字 then begin max:=x;name:=nn end then end; for clo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論