NOIP普及組初賽歷年試習(xí)題及答案閱讀題篇_第1頁
NOIP普及組初賽歷年試習(xí)題及答案閱讀題篇_第2頁
NOIP普及組初賽歷年試習(xí)題及答案閱讀題篇_第3頁
NOIP普及組初賽歷年試習(xí)題及答案閱讀題篇_第4頁
NOIP普及組初賽歷年試習(xí)題及答案閱讀題篇_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、NOIP普及組初賽歷年試題及答案閱讀題篇閱讀程序?qū)懡Y(jié)果(共4 題,每題8 分,共計(jì)32 分)閱讀程序題是得分的關(guān)鍵,因?yàn)椴皇亲屇闵蠙C(jī)去運(yùn)行程序,所以要一步步地讀程序,記錄相關(guān)變量值的變化情況。因?yàn)槌绦虻倪\(yùn)行結(jié)果只有輸出語句才有輸出,所以只寫出輸出語句的結(jié)果。有時(shí)要找出規(guī)律才能寫出結(jié)果,特別是循環(huán)次數(shù)多的情況,另外要注意邊界值,不能多算一步也不能少算一步。解決這類問題的關(guān)鍵在于能夠分析程序的結(jié)構(gòu)以及程序段的功能。常見的有列表法、畫流程圖法等。完成這類題目的方法和步驟如下:1、從頭到尾通讀程序,大致把握程序的算法、找出這個(gè)題目的即這個(gè)程序想干什么。抓住了它,不僅得出答案變得較容易,而且對自己的結(jié)果

2、也會比較有信心。2、通過給程序分段、理清程序的結(jié)構(gòu)和層次,達(dá)到讀懂程序的目的。3、閱讀程序中特別注意跟蹤主要變量的值的變化,可以用列表的方法,了解變量變化和程序的運(yùn)行結(jié)果,注意發(fā)現(xiàn)規(guī)律。所謂列表法,就是將各變量名作為表頭,在程序的執(zhí)行過程中,將各變量值的變化記錄在相應(yīng)變量的下方。4、按照程序中輸出格式的要求,寫出運(yùn)行結(jié)果,并帶著結(jié)果回到程序進(jìn)行檢查。在閱讀程序時(shí),要特別注意過程、函數(shù)所完成的子任務(wù)以及和主程序之間的參數(shù)傳遞關(guān)系。在閱讀程序中,比較好的方法是首先閱讀主程序,看其需要調(diào)用的過程或函數(shù)是什么,最后要求輸出變量是什么;其次在閱讀程序中,將較長的程序分成幾個(gè)程序段(特別注意循環(huán)結(jié)構(gòu)、判斷

3、結(jié)構(gòu)),閱讀理解各程序段的功能以及各程序之間的關(guān)聯(lián)。NOIP2011-1.#include<iostream>using namespace std;int main()int i,n,m,ans;cin>>n>>m;i=n;ans=0;while(i<=m)/從i=1020,共循環(huán)計(jì)數(shù)11次ans+=i;/每次循環(huán),ans累加一次 i 值i+;cout<<ans<<endl;/此時(shí)ans值應(yīng)為(10+20)*11/2,即165return 0;輸入: 10  20輸出:  165NOIP2011-2.#in

4、clude<iostream>#include<string>using namespace std;int main()string map= "9"/數(shù)組中元素位置是從0開始計(jì)數(shù)的string tel;int i;cin>>tel;for(i=0;i<tel.length();i+)if(teli>='0') && (teli<='9') )/如果輸入的tel是09,直接輸出tel值cout<<teli;else if( (teli>='A&#

5、39;) && (teli<='Z')cout<<mapteli-'A'/如果輸入的tel是AZ,則輸出一個(gè)map數(shù)組中對應(yīng)的元素/輸出元素在map數(shù)組中位置為“輸入字母與A的ASCII碼的差值”/如果輸入的是其他字符,比如“-”,則不符合循環(huán)條件,無輸出cout<<endl;return 0;輸入: CCF-NOIP-2011輸出:  011NOIP2011-3.#include<iostream>#include<cstring>using namespace std;const

6、 int SIZE= 100;int main()int n,i,sum,x,aSIZE;cin>>n;memset(a,0,sizeof(a);for(i=1;i<=n;i+)cin>>x;ax+;/循環(huán)結(jié)束時(shí)數(shù)組中的值為:a1=1,a2=2,a3=3,a4=2,a5=1,a6=2i=0;sum=0;while(sum<(n/2+1)/當(dāng)sum值大于等于n/2+1,即sum>=6的時(shí)候,循環(huán)結(jié)束i+;sum+=ai;cout<<i<<endl;/輸出循環(huán)結(jié)束時(shí) i 的值(不是sum的值)return 0;輸入:114 5 6

7、6 4 3 32 3 2 1輸出: 3NOIP2011-4.#include<iostream>using namespace std;int solve(int n,int m)int i,sum;if(m=1) return 1;/遞歸函數(shù)solve(i,m)中m=1時(shí)返回函數(shù)值為1sum=0;for(i=1;i<n;i+)/遞歸函數(shù)solve(i,m)中i=1時(shí)不循環(huán),sum=0sum+= solve(i,m-1);return sum;/可遞歸求得sum=solve(1,3)+(2,3)+(3,3)+(4,3)+(5,3)+(6,3)int main()in

8、t n,m;cin>>n>>m;cout<<solve(n,m)<<endl;/輸出函數(shù)值,即sum值return 0;輸入: 7  4輸出:  20NOIP2012-1.#include<iostream>using namespace std;int a, b, c, d, e, ans;int main()cin>>a>>b>>c;d = a+b;e = b+c;ans = d+e;/ans=a+b+b+ccout<<ans<<endl;return

9、 0;輸入: 1 2 5輸出:  10NOIP2012-2.#include<iostream>using namespace std;int n, i, ans;int main()cin>>n;ans = 0;for (i = 1; i <= n; i+)if (n % i = 0)ans+;/統(tǒng)計(jì)118中18的因數(shù)個(gè)數(shù)cout<<ans<<endl;return 0;輸入: 18輸出:  6NOIP2012-3.#include<iostream>using namespace std;int n, i

10、, j,a100100;int solve(int x,int y)int u, v;if(x = n)return axy;/遞歸邊界:當(dāng)x=5時(shí),solve(5,y)=a5yu= solve(x + 1, y);v= solve(x + 1, y + 1);if(u > v)return axy + u;elsereturn axy + v;/用遞歸最終求得solve(1,1)=a11+solve(2,2)=2+12=14int main()cin>>n;for(i = 1; i <= n; i+)for (j = 1; j <= i; j+)cin>&

11、gt;aij;cout<<solve(1,1)<<endl;return 0;輸入:52-1 42 -1 -2-1 6 4 03 2 -1 5 8輸出:  14NOIP2012-4.#include<iostream>#include<string>using namespace std;int n, ans, i, j;string s;char get(int i)if(i < n)return si;elsereturn si-n;/i<8時(shí),get(i)返回si;i>=8時(shí),get(i)返回si-8,從第一個(gè)開

12、始返回int main()cin>>s;n= s.size();ans= 0;for(i = 1; i <= n-1; i+)for (j = 0; j <= n-1; j+)if (get(i+j) < get(ans+j)ans = i;break;else if (get(i+j) > get(ans+j)break;/此循環(huán)執(zhí)行完畢,ans=7for(j = 0; j <= n-1; j+)cout<<get(ans+j);/1,ans+j<8,輸出s7+0;2,ans+j=8,輸出s8-8;3,ans+j=9,輸出s9-8c

13、out<<endl;return 0;輸入:  CBBADADA輸出:  ACBBADADNOIP2013-1.#include<iostream>using namespace std;int main()inta, b;cin>>a>>b;cout<<a<<"+"<<b<<"="<<a+b<<endl;return 0;/輸出:3+5=8輸入: 3  5輸出: 3+5=8NOIP2013-2.

14、#include<iostream>using namespace std;int main()int a, b, u, i, num;cin>>a>>b>>u;num = 0;for (i = a; i <= b; i+)if (i % u) = 0)num+;/1-100之間有多少數(shù)是15的倍數(shù)cout<<num<<endl;return 0;輸入: 1  100  15輸出: 6NOIP2013-3.#include<iostream>using namespace s

15、td;int main()const int SIZE = 100;int n, f, i, left, right, middle, aSIZE;cin>>n>>f;for (i = 1; i <= n; i+)cin>>ai;left = 1;right = n;do middle= (left + right) / 2;if(f <= amiddle)right = middle;elseleft = middle + 1;while (left < right);/ middle=6,17>a6,則left=7/ middle

16、=9,17<a9,則right=9/ middle=8,17<a8,則right=8/ middle=7,17=a7,則right=7/ left=right,直接輸出leftcout<<left<<endl;return 0;輸入:12 172 4 6 9 11 15 1718 19 20 21 25輸出:  7NOIP2013-4.#include<iostream>using namespace std;int main()constint SIZE = 100;intheightSIZE, numSIZE, n, ans;cin

17、>>n;for(int i = 0; i < n; i+) cin>>heighti;numi = 1;for (int j = 0; j < i; j+) if (heightj < heighti) && (numj >= numi)numi = numj+1;/兩兩相比,得出num0, num1, num2, num3, num4, num5ans= 0;for(int i = 0; i < n; i+) if (numi > ans) ans = numi;/得出num中最大值,即在數(shù)組height中第幾位數(shù)值

18、最大cout<<ans<<endl;return 0;輸入:62  5  3  11  12  4輸出:  4不懂算法跟蹤變量!列表模擬!遇到遞歸畫樹形圖!注意邊界!找到規(guī)律了還會流程圖恭喜你,32分到手了!NOIP2014-1.#include <iostream>using namespace std;int main()int a, b, c, d, ans;cin>> a >> b >> c;d = a - b; /將a-b=-1賦值給da =

19、d + c; /將d+c=3賦值給aans = a * b; /ans=a*b=3*3=9cout<< "Ans = " << ans << endl;return 0;輸入:2  3  4輸出: Ans=9NOIP2014-2.#include <iostream>using namespace std;int fun(int n)if (n = 1)return 1; /邊界fun(1)=1if (n = 2)return 2; /邊界fun(2)=2return fun(

20、n - 2) - fun(n - 1);   /fun(n)=fun(n-2)-fun(n-1)int main()int n;cin >> n;cout << fun(n) << endl;/fun(7)=fun(5)-fun(6)=-11return 0;輸入: 7輸出:  -11NOIP2014-3.#include <iostream>#include <string>using namespace std;int main()string st;int i, len;getline(cin, s

21、t);len = st.size();for(i = 0; i < len; i+)if (sti >= 'a' && sti <= 'z')sti = sti - 'a' + 'A' /如果字符串st中字母小寫,則替換成大寫cout<< st << endl;return 0;輸入: Hello, my name is Lostmonkey.輸出: HELLO, MY NAME IS LOSTMONKEY.NOIP2014-4.#include <iost

22、ream>using namespace std;const int SIZE =100;int main()int pSIZE;int n, tot, i, cn;tot= 0;cin>> n;for(i = 1; i <= n; i+)pi = 1; /p1-p30中所有元素賦值1for(i = 2; i <= n; i+)if (pi = 1)tot+; /計(jì)數(shù)cn = i * 2; /找出2-30中所有2iwhile (cn <= n) pcn = 0;cn += i; /找出2-30中所有3i/對2-30中素?cái)?shù)計(jì)數(shù),并輸出個(gè)數(shù)cout<<

23、; tot << endl;return 0;輸入: 30輸出: 10NOIP2015-1.#include <iostream>using namespace std;int main()int a, b, c;a = 1;b = 2;c = 3;if(a > b) /不符合循環(huán)條件,不執(zhí)行if(a > c)cout << a << ' 'elsecout << b << ' 'cout << c << endl;return 0;輸出: 3NOIP20

24、15-2.#include <iostream>using namespace std;struct pointint x;int y; /聲明結(jié)構(gòu)體類型pointint main()int a, b, c;struct EXint a;int b;point c;e; /聲明結(jié)構(gòu)體類型EXe.a = 1; /結(jié)構(gòu)體變量e中變量ae.b = 2; /結(jié)構(gòu)體變量e中變量be.c.x = e.a + e.b;/結(jié)構(gòu)體變量e中的結(jié)構(gòu)體變量c中的變量xe.c.y = e.a * e.b;/結(jié)構(gòu)體變量e中的結(jié)構(gòu)體變量c中的變量ycout << e.c.x << 

25、9;,'<< e.c.y << endl;return 0;輸出: 3,2NOIP2015-3.#include <iostream>#include <string>using namespace std;int main()string str;int i;int count;count = 0;getline(cin, str);for(i = 0; i < str.length();i+)if(stri >= 'a' &&stri <= 'z')count+; /統(tǒng)

26、計(jì)字符串中小寫字母數(shù)量cout << "It has "<< count << " lowercases" << endl;return 0;輸入: NOI2016will be held in Mian Yang.輸出: It has 18 lowercasesNOIP2015-4.#include <iostream>#include <string>using namespace std;void fun(char *a, char *b)a = b;(*a)+; /指針題in

27、t main()char c1, c2, *p1, *p2;c1 = 'A'c2 = 'a'p1 = &c1;p2 = &c2;fun(p1, p2);/p1=p2=&c2,把c2的地址賦值給指針變量p1/p1+,則有&a+1=&b, 所以,c2=b,cout << c1 << c2<< endl;return 0;輸出: AbNOIP2016-1.#include <iostream>using namespace std;int main()int max, min, s

28、um, count = 0;int tmp;cin>> tmp;if(tmp = 0)return0; /如果輸入的數(shù)字是0,程序退出max= min = sum = tmp;count+;while(tmp != 0) cin>> tmp;if(tmp != 0) sum += tmp; /求和count+;/計(jì)數(shù)if(tmp > max)max = tmp; /找出最大值if(tmp < min)min = tmp; /找出最小值cout<< max << "," << min << &

29、quot;,"<< sum / count << endl;/輸出“最大值, 最小值, 平均值”return 0;輸入: 1 2 3 4 5 6 0 7輸出:  6,1,3NOIP2016-2.#include <iostream>using namespace std;int main()int i = 100, x = 0, y = 0;while (i > 0) i-;x = i % 8;if (x = 1)y+; /統(tǒng)計(jì)1-100中有多少數(shù)是“8的倍數(shù)+1”cout << y << endl;retur

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論