信息學奧賽輔導程序設計試題匯編答案_第1頁
信息學奧賽輔導程序設計試題匯編答案_第2頁
信息學奧賽輔導程序設計試題匯編答案_第3頁
信息學奧賽輔導程序設計試題匯編答案_第4頁
信息學奧賽輔導程序設計試題匯編答案_第5頁
已閱讀5頁,還剩48頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、程序設計試題及答案(備注:試題難度評價采取五級評價體系,分基礎、容易、一般、稍難、難五個等級,其中的一、二、三級都屬于程序設計的基礎試題級別,同學們稍加思考均有能力求得正確解答,對于四級試題屬于程序設計試題基礎級別的思考題,五級難度試題在此沒有涉及,在程序設計高級試題中另行講解。對于基礎和容易兩個級別的程序設計試題,若能夠給出語句分類(如If條件語句、條件語句嵌套、循環語句、多重循環語句等)的將盡量給出。若屬于13大類別的將盡量標注。)程序設計試題幾大分類:1、 素數類問題(求素數的幾種算法):2、 數據排序問題(數據排序的幾種方法):3、 最大公約數和最小公倍數問題(幾種算法):4、 公式求

2、解類問題(如求圓周率、自然常數e、解方程等等):5、 編號相反處理問題:6、 約瑟夫問題(或猴子選大王問題、密碼問題):7、 回文數問題:8、 高精度數值計算問題:9、 數值計算問題:10、 進制相互轉換問題:11、 字符串倒置問題:12、 排列與組合類問題:13、 因子、質因子(質因數)類相關問題:答案部分:(程序設計的源程序沒有統一的標準答案,實現程序的算法也是多種多樣,但結果是唯一的,算法也有優劣之分,一個程序的優劣,關鍵在于是否找到了好的算法,以下程序和算法不一定就是最佳算法和最佳程序,只能僅供參考,希望同學們能夠對某些程序提出更好的算法來改進程序)(經常碰到的判斷是否為素數、是否為回

3、文數、求兩個數的最大公約數、求兩個數的最小公倍數等問題的子函數源程序,請務必記住!) 判斷是否為素數,若是素數則返回true,若不是素數則返回false:function prime(x:longint):boolean; var j,y:longint; begin prime:=true; if x<2 then prime:=false; y:=trunc(sqrt(x); for j:=2 to y do if (x mod j = 0) then begin prime:=false; exit; end; end;備注:1100之間所有的素數:2、3、5、7、11、13、17

4、、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97。(共25個) 判斷是否為回文數,若是回文數則返回true,若不是回文數則返回false:function huiwen(n:longint):boolean; var m,i,j:longint; a:array1.10 of integer; begin if n<0 then begin huiwen:=false; exit; end; m:=n; i:=0; huiwen:=true; repeat i:=i+1; ai:=m mod 10; m:=m div 10; u

5、ntil m=0; for j:=1 to (i div 2) do if aj<>ai-j+1 then begin huiwen:=false; exit; end; end;求最大公約數子函數,返回兩個正整數的最大公約數,采用輾轉相除法算法;function gcd(a,b:longint):longint; begin if b=0 then gcd:=a else gcd:=gcd(b,a mod b); end; 求最小公倍數:lcm=a*b div gcd(a,b);(以下程序設計試題來自奧賽經典(語言篇)第2章 基本語句與程序結構例題部分:1、 求梯形的面積。(梯形

6、面積公式:)(,測試數據2、 求一元二次方程ax2bxC0的兩個實根。(求根公式:)(,測試數據a1,b5,c6;答案:x12、x23)3、 輸入一個三位的自然數,然后把這個數的百位與個位對調,輸出對調后的結果。() 4、 輸入三個數a、b、c,首先判斷這三個數能否構成三角形,若能,則求出三角形的面積。(提示:海倫公式,其中,a、b、c為邊長)(,If條件語句,測試數據a5,b6,c7;答案:14.7)5、 從鍵盤讀入三個數,按從大到小的順序把它們打印出來。(,If條件語句)6、 輸入三角形的三邊,判斷它是否是直角三角形。(,If條件語句,測試數據3、4、5;4、5、6;答案Yes;No)7、

7、 編寫一個根據用戶鍵入的兩個操作數和一個運算符,由計算機輸出運算結果的程序。()8、 輸入一個年號,判斷它是否為閏年。(,If條件語句,測試數據1900;2000;2008;答案:No;Yes;Yes)9、 編程計算S123100。(,循環語句, 答案:5050)相關練習:(1);(2);(3);(4);(相關練習答案:(1)5.19(保留2為小數);(2)338350;(3)2550;(4)1717)10、 根據公式,計算圓周率的值。(,循環語句,測試數據n10000;答案:3.1414971639)program e;var i:longint; s:real;begin writeln;

8、 s:=0; for i:=1 to 10000 do s:=s+1/(i*i); writeln(sqrt(6*s);end.11、 計算n!。(n!1×2×3××n,取n10)(,循環語句,10!3628800)12、 已知一對兔子,每個月可以生一對小兔,而小兔過一個月后也可生一對小兔。即兔子的對數是:第一個月1對,第二個月2對,第三個月3對,第四個月5對,假設兔子的生育期是12個月,并且不死,問一年后,這對兔子有多少對活著的后代?(Fibonacci數列問題)(,循環語句, 1、2、3、5、8、13、21、34、55、89、144、233;答案23

9、3)13、 求兩個整數a與b的最大公約數和最小公倍數。(,循環語句、If條件語句,測試數據16和24,最大公約數8,最小公倍數48)14、 利用格利高公式求。,直到最后一項的值小于106為止。(,循環語句)(答案:3.1415946569E+00)program e2_32;var n,fh:longint; s,t,p:real;begin writeln; n:=1; s:=0; t:=1; fh:=1; while (abs(t)>=1e-6) do begin t:=fh/n; s:=s+t; n:=n+2; fh:=-fh; end; p:=4*s; writeln('

10、pi=',p);end.相關練習:利用公式,求。(計算前10000項時,答案為3.1415426536)program e;var i,a,b:longint; x,s:real;begin writeln; s:=0; for i:=1 to 10000 do begin a:=(4*i-3); b:=(4*i-1); s:=s+1/(a*b); end; writeln(8*s);end.15、 求100999中的水仙花數。(若三位數ABC,ABCA3B3C3,則稱ABC為水仙花數。例如153,135333153,則153是水仙花數。)(,循環語句)(答案:153、370、371、

11、407)program e12;var i,a,b,c:integer;begin writeln; for i:=100 to 999 do begin a:=i div 100; b:=(i mod 100) div 10; c:=i mod 10; if i=a*a*a+b*b*b+c*c*c then write(i:8); end;end.16、 試編寫能夠打印輸出如下圖形的程序。(,循環語句)AAAAAAAAA AAAAAAA AAAAA AAAAprogram e;const n=5;var i,j:integer;begin writeln; for i:=1 to n do

12、begin write('':i); for j:=1 to (n-i)*2+1 do write('A'); writeln; end;end.17、 四個學生上地理課,回答我國四大淡水湖大小時這樣說:()甲:“最大洞庭湖,最小洪澤湖,鄱陽湖第三。”乙:“最大洪澤湖,最小洞庭湖,鄱陽湖第二,太湖第三。”丙:“最小洪澤湖,洞庭湖第三。”丁:“最大鄱陽湖,最小太湖,洪澤湖第二,洞庭湖第三。”對于每個湖的大小,每個學生僅答對一個,請編程確定四個湖的大小。習題部分:1、 已知三角形的兩邊a、b和夾角jc的值,求第三邊(已知條件由鍵盤輸入)。()(提示:余角公式)(測試

13、數據:輸入a3、b4、jc90;輸出5)program e2_5;var a,b,c,jc:real;begin writeln('input a,b,jc:'); readln(a,b,jc); c:=sqrt(a*a+b*b-2*a*b*cos(pi*jc/180); writeln(c:8:2);end.2、 編寫程序把一個四位整數3581顛倒成1853。()program e;const n=3581;var a,b,c,d:integer;begin writeln; a:=n mod 10; b:=(n div 10) mod 10; c:=(n div 100)

14、mod 10; d:=n div 1000; writeln(a,b,c,d);end.相關練習:任意輸入一個正整數,顛倒輸出該數。program e;var n:longint;begin writeln; writeln('input a integer number:'); readln(n); repeat write(n mod 10); n:=n div 10; until n=0;end.3、 輸入a、b、c三個數,打印出最大者。(,If條件語句)program e;var a,b,c:real;begin writeln('input three num

15、ber for a,b,c:'); readln(a,b,c); if (a>b)and(a>c) then writeln(a); else if (b>a)and(b>c) then writeln(b); else writeln(c);end.4、 從鍵盤讀入兩個數,比較其大小,把大數置于x,小數置于y。請設計實現該功能的程序。(,If條件語句)(程序略)5、 輸入三個數,判斷以這三個數為邊能否組成一個三角形。若不能,則給出適當信息;若能,則進一步判斷它們構的是銳角三角形、直角三角形還是鈍角三角形,并輸出其特征(等邊、等腰、直角、一般)、求其面積。(,I

16、f條件語句)(算法分析:對于判斷是銳角、直角、還是鈍角三角形,只需判斷最大邊的平方與其余兩邊的平方和的大小比較即可,小于則為銳角、等于則為直角、大于則為鈍角。)(測試數據:1、2、3;3、4、5;)4、4、7;5、5、5;答案:No;直角、面積6.00;鈍角、等腰、面積6.78;銳角、等邊、面積10.83)program e;var a,b,c,t,s,d,ja,jb,jc:real;begin writeln('input three number for a,b,c:'); readln(a,b,c); if a<b then begin t:=a; a:=b; b:

17、=t; end; if a<c then begin t:=a; a:=c; c:=t; end; if (a<b+c) then begin if (a*a<b*b+c*c) then writeln('rui jiao san jiao xing.') else if(a*a=b*b+c*c) then writeln('zhi jiao san jiao xing.') else writeln('dun jiao san jiao xing.'); if (a=b)and(b=c)and(c=a) then writel

18、n('deng bian san jiao xing.') else if (a=b)and(b<>c)or(a=c)and(c<>b)or(b=c)and(c<>a) then writeln('deng yao san jiao xing.') else if (a*a<>b*b+c*c) then writeln('yi ban san jiao xing.'); d:=(a+b+c)/2; s:=sqrt(d*(d-a)*(d-b)*(d-c); writeln('s=',s

19、:0:2); end else writeln('NO!');end.6、 設我國目前的人口為11億,且每年的增長率為1.5。問多少年后,我國的人口會翻一番?()(答案:47)program e2_22;var i:integer; s:real;begin writeln; s:=11; i:=0; while s<22 do begin s:=s*(1.015); inc(i); end; writeln(i);end.7、 Fibonacci數列問題:數列的頭兩個數分別是0和1,從第三個數開始,每個數皆為它的前兩個數之和,即:0,1,1,2,3,5,輸出該數列的第5

20、0個數。(,循環語句)(答案:7778742049)program e;$N+,E+var i:integer; x,y,z:extended;begin writeln; x:=0; y:=1; write(x:20:0,y:20:0); for i:=3 to 50 do begin z:=x+y; write(z:20:0); x:=y; y:=z; end;end.8、 編寫程序求出下式中n的最大值:224262n2<1500。(,循環語句)(答案:18)program e2_24;var n,s:integer;begin writeln; s:=0; n:=0; while

21、s<1500 do begin inc(n,2); inc(s,n*n); end; writeln(n-2);end.9、 把一元的鈔票換成一分、二分和五分的硬幣(每種至少一枚),問有多少種兌換方法?()(答案:461)program e2_29;var i,j,k,ans:integer;begin ans:=0; for k:=1 to 19 do for j:=1 to 47 do for i:=1 to 93 do if (k*5+j*2+i)=100 then inc(ans); writeln(ans);end.10、 編寫程序求最小正整數m、n(0<n<m)為

22、何值時,1989m與1989n的最后三位數字相同?()(算法:這類數字很大且有效數字位數很多(超出最多有效位數extended數據類型有效數字18位)的數字問題,一定要另辟蹊徑尋找突破口,注意到此題只要求最后三位數字相同,則我最多保留最后四位有效數字即可進行判斷。還請記住這樣一個事實,如1989×19893956121,3956121×19897868724669,最后四位數字是“4669”,而我把3956121取其最后的四位數“6121”與1989相乘即6121×1989=12174669,最后四位數字也是“4669”,沒有破壞最后四位有效數字的值,因此可以通過

23、這種方法來編寫此程序。)(答案:m51;n1);program e;var m,n,i,j:integer; x,y,a,b:longint;begin writeln; for m:=2 to 60 do for n:=1 to m-1 do begin x:=1; y:=1; for i:=1 to m do begin x:=x mod 10000; x:=x*1989; a:=x mod 1000; end; for j:=1 to n do begin y:=y mod 10000; y:=y*1989; b:=y mod 1000; end; if a=b then writeln

24、('m=',m,' n=',n); end;end.11、 編寫程序提示用戶輸入一系列整數,用0作結束標志,統計其中有多少個正數。()program e;var count,x:integer;begin writeln; writeln('input integer number(0-end):'); count:=0; repeat read(x); if x>0 then inc(count); until(x=0); writeln('count=',count);end.12、 求自然常數的值。(提示:0!1,1!

25、1)()(1) 直到第50項;(2)直到最后一項小于105。(答案:(1)2;(2)9E+0000)(備注:第2小問程序略,只須將更改語句“until (1/s)<1E-5;”即可求的解答)program e2_35;$N+var i,count:integer; e,s:extended;begin e:=1; count:=0; repeat inc(count); s:=1; for i:=1 to count do s:=s*i; e:=e+1/s; until count=50; writeln(e);end.13、 三齊王點兵的故事。相傳三齊王韓信才智過人,從不直接清點自己軍

26、隊的人數,只是讓士兵先后以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了(不超過100人)。輸入三次排尾的人數,輸出總人數。()program e2_36;var a,b,c,i:integer;begin writeln('shu ru p3(02),p5(04),p7(06) de wei shu:'); readln(a,b,c); for i:=100 downto 1 do if (i mod 3=a)and(i mod 5=b)and(i mod 7=c) then writeln(i); if i=1 then writeln(&

27、#39;No answer!');end.14、 編寫程序,計算N!以十進制數形式表示的數中最右的非零數字,并找出在它右邊有幾個零。例如12!1×2×3××12479001600。因此12!的右邊有2個零。()(提示:碰到5、52、53、54才會出現末尾是零,所以1000!末尾零的個數為:(1000 div 5)(1000 div 52)(1000 div 53)(1000 div 54)249)(下面的程序沒采用上面的算法,采取另一種算法實現了這一程序,顯然上面的算法效率高)(程序算法:只需提供末尾幾位有效數字即可,我采取提供四位有效數字相乘)

28、program I_11;var s:longint; i,d:integer;begin writeln; d:=0; s:=1; for i:=1 to 1000 do begin s:=s*i; if (s mod 1000 =0) then begin s:=s div 1000; d:=d+3; end; if (s mod 100 = 0) then begin s:=s div 100; d:=d+2; end; if (s mod 10 = 0) then begin s:=s div 10; d:=d+1; end; s:=s mod 10000; end; writeln;

29、 write(d);end.15、 編寫程序,輸出“字母塔”。以此類推共26層。A() ABA ABCBAprogram e2_40;var i,j:integer;begin writeln; for i:=1 to 26 do begin for j:=1 to 26-i do write(' '); for j:=1 to i do write(chr(64+j); for j:=i-1 downto 1 do write(chr(64+j); writeln; end;end.第4章 數組類型例題部分:1、 輸入10個整數,把這10個數按從小到大的順序排列。()(冒泡法

30、排序和選擇法排序兩種方法)冒泡法排序:program e1;const n=10;var a:array1.10 of integer; i,j,t:integer;begin writeln('input ',n,' integer number:'); for i:=1 to n do read(ai); for i:=1 to n-1 do for j:=1 to n-i do if aj>aj+1 then begin t:=aj; aj:=aj+1; aj+1:=t; end; for i:=1 to n do write(ai:5);end.2

31、、 折半查找。(二分法查找)()3、 旅館里有一百個房間,從1到100編了號。第一個服務員把所有的房間門都打開了,第二個服務員把所有編號是2的倍數的房間“相反處理”,第三個服務員把所有編號是3的倍數的房間作“相反處理”,以后每個服務員都是如此。問第100個服務員來過后,哪幾扇門是打開的。(所謂“相反處理”是:原來開著的門關上,原來關上的門打開。)()(提示:對于任何一個編號,例如8,它的因子只有1、2、4、8,并且成對出現,當此數的因子數為偶數個時將被關上,當此數的因子數為奇數個時才會被打開。考慮到因子成對出現的情況,因此只有平方數的因子是奇數個的,所以門被打開的只能是平方數的房間,如1,4等

32、)4、 編寫程序把任意十進制整數轉換成二進制整數。()5、 所謂“幻方”,是一個行、列為奇數的方陣,把1n2這n2個不同的數放入方陣中,使方陣的每行、每列和每個對角線上的元素的和全部相等。下面給出幻方的一種排列方法:(1) 先把1放在第一行的中間位置;(2) 下一個數放在上一個數的右上方;(3) 若右上方已超出方陣的第一行,則下一個數放在下一列的最后一行上;(4) 若右上方已超出方陣的最后一列,則下一個數放在上一行的第一列上;(5) 若右上方已經有數,或右上方已超出方陣的第一行最后一列,則下一個數放在上一個數的正下方。編寫程序,對輸入小于15的n,打印出相應的幻方。()6、 在一個字符數組LE

33、T中形成由A開始的連續26個大寫字母構成的字串,并將其倒置后仍放在LET中。7、 隨機輸入一個長度不超過255的字符串,將其倒置后輸出。8、 隨機輸入一些國家的英文名字,以end作為輸入結束標志,按字母順序排序后輸出。9、 求n個字符串的最長公共子串,n<20,字符長度不超過255。例如n3,由鍵盤依次輸入三個字符串為:what is local bus?Name some local bus.Local bus is high speed I/O bus close to the processor.則最長公共子串為“local bus”。10、 文本的整版。編寫一個程序,從鍵盤以任意

34、的方法輸入句子,然后打印出來。打印時每行寬度必須為n個字符。如果一行的最后一個單詞超出了本行n個字符的范圍,則應把它移到下一行去。輸入一個句子測試你的程序。習題部分:1、 輸入n個整數,請找出最小數所在的位置,并把它與第一個數對調。()program e4_2;var a:array1.10of integer; i,t,y:integer;begin writeln('input ten integer number:'); for i:=1 to 10 do read(ai); t:=a1; for i:=2 to 10 do if ai<t then t:=ai;

35、for i:=1 to 10 do if ai=t then begin writeln('the min number is ',i,'th'); ai:=a1; a1:=t; end; for i:=1 to 10 do write(ai:8);end.2、 用邊排序邊合并的方法把兩個有序數列合并為一個新的有序數列,不得先合并再重新排序。()(測試數據:這里a組數據共8個:1 1 3 6 6 7 9 10;b組數據共5個:0 1 2 3 4)program e4_3;var a:array1.8 of integer; b:array1.5 of integ

36、er; c:array1.13 of integer; i,j,k,m,n:integer;begin writeln('input 8 integer number of square arrayA:'); for i:=1 to 8 do read(ai); writeln('input 5 integer number of square arrayB:'); for i:=1 to 5 do read(bi); j:=1; k:=1; m:=aj; n:=bk; for i:=1 to 13 do begin if m<n then begin c

37、i:=m; inc(j); m:=aj; if j=9 then m:=maxint; end else begin ci:=n; inc(k); n:=bk; if k=6 then n:=maxint; end; end; for i:=1 to 13 do write(ci:4);end.3、 將一個數插入到有序的數列中,插入后數列仍然有序。()(測試數據:有序數組為1 1 3 6 6 7 9 10;待插入數為5)program e4_4;var i,j,n:integer; flag:boolean; a:array1.9 of integer;begin writeln('i

38、nput 8 integer square number:'); for i:=1 to 8 do read(ai); writeln('input a integer number to insert:'); readln(n); flag:=false; i:=1; repeat if ai>n then flag:=true else inc(i); until flag=true; for j:=9 downto i+1 do aj:=aj-1; ai:=n; for i:=1 to 9 do write(ai:4);end.4、 有N個無序的數存放在A數

39、組中,請將后面相同的數刪成只剩下一個,并輸出經過刪除后的數列。()(測試數據:數列為1 3 5 3 7 5 3 1;答案:1 3 5 7)program e4_5;var a:array1.8 of integer; i,j,n:integer;begin writeln('input 8 integer number:'); for i:=1 to 8 do read(ai); for i:=2 to 8 do for j:=1 to i-1 do if ai=aj then ai:=maxint; for i:=1 to 8 do if ai<>maxint t

40、hen write(ai:4);end.5、 有N個人排隊到R個相同的水龍頭去打水,他們裝滿各自水桶的時間T1、T2、TN為整數且互不相等,應如何安排他們打水的順序才能使他們花費的總時間最少?(花費的總時間等于每個花費時間的總和)6、 求一個五階方陣中某個元素的位置:它在行上是最小的,在列上也是最小的,如果沒有請輸出“NO FIND!”。()(分析:整個矩陣中的最小值,當然也是所在行和所在列的最小值,因此肯定能找到這樣的數)測試數據:答案:2、1、3、611427859231253222118151716241261310192014program e;var i,j,x,y:integer;

41、 minx:integer; a:array1.5,1.5 of integer;begin writeln; writeln('input number(5*5):'); for i:=1 to 5 do for j:=1 to 5 do read(ai,j); for i:=1 to 5 do begin minx:=ai,1; x:=i; y:=1; for j:=1 to 5 do if ai,j<minx then begin minx:=ai,j; y:=j; end; for j:=1 to 5 do if aj,y<minx then break;

42、if j=5 then writeln('the number is ',minx,'',x,'','',y,''); end;end.第5章 過程與函數例題部分:1、 編程求:1!3!5!7!9!11!。2、 求數字的乘積根。一個正整數的數字的乘積N的定義是:這個整數中非零數字的乘積。例如,整數999的數字乘積為9×9×9,即729。729的數字乘積為7×2×9,即126。126的數字乘積為1×2×6,即12。12的數字乘積為1×2,即2。一個

43、正整數的數字乘積根N是這樣得到的:反復取該整數的數字乘積,直到得到一位數字為止。例如,在上面的例子中數字的乘積根是2。編寫一個程序,輸入一個正整數(長度不超過200位數字),輸出計算其數字乘積根的每一步結果。3、 漢諾(Hanoi)塔問題。設有n個大小不等的中空圓盤,按照從小到大(尺寸和序號)的順序疊套在立柱A上。另有兩根立柱B和C,如圖所示。問題要求把全部圓盤從A柱(源柱)移到C柱(目標柱)。移動過程中可借助B柱(中間柱)。移動時有如下要求:(1) 一次只能移動一個圓盤;(2) 不允許把大盤放在小盤上邊;(3) 可使用任意一根立柱暫存圓盤。ABC4、 把一個十進制整數轉化為K進制數(K10)

44、。5、 八皇后問題:把八個皇后擺在8×8國際象棋棋盤格子內,使它們互不捕獲對方。換言之,在任何一行、一列或一條對角線上,僅能放置一個皇后。這一問題是由19世紀著名數學家高斯(Gauss)于1850年首先提出的。(答案共有92種解答)6、 已知:切比雪夫多項式如下: (提示:運用遞歸函數計算)對給定的不同的正整數,它是一些階數不同的多項式,編程計算第n個多項式的值。習題部分:1、 編寫一遞歸函數說明,用以計算組合數C(M,N)。(即)2、 兩個人玩井字游戲,在井字進分的九個空位上輪流畫O或*,誰最先使自己的三個O或三個*在一條直線上,誰就贏了。編寫程序檢查每一步是否走得正確,并告訴誰是

45、勝利者。第6章 集合與記錄類型例題部分:1、 七段數碼管問題。2、 任意給出一個正整數N,找一個正整數M,使得N*M的值的數字由0、1、C(C9)組成,且這些數字至少出現一次。編寫程序在整數范圍內找出滿足條件的最小M。若沒有給出信息,則輸出“No find!”。例如:C3、N65時,M48,65×483210; C8、N125時,“No find!”。(以下程序設計試題來自計算機二級考試復習指南)1. 數列稱為e數列,()每一個e(n)(n1,2,)稱為e數。求1,30000之內:(1) 最大的e數;(2)e數的數目。(該數列前面幾項為1、1、3、11、53、;答案:16687;8)

46、program e;var a,b,c,n:longint;begin writeln; n:=3; a:=1; b:=1; repeat c:=(n-2)*a+(n-1)*b; a:=b; b:=c; inc(n); until c>30000; writeln('maxe=',a,' count=',n-2);end.2. 計算并輸出:之值(精確到小數點后第5位)。()(答案:0.99900)program e;var i:integer; s,n:real;begin writeln; s:=0; for i:=1 to 1000 do begin

47、n:=i; s:=s+1/(n*(n+1); end; writeln(s:0:5);end.3. 已知,求:()(1) F(50);(2)F(0)F(1)F(50)。(答案:212101;97262)program e;var i,a,b,c,d,s:longint;begin writeln; a:=1; b:=1; c:=1; s:=3; for i:=3 to 50 do begin d:=a-2*b+c; s:=s+d; a:=b; b:=c; c:=d; write(d:8); end; writeln; writeln('s=',s);end.4. 求滿足:A&#

48、183;B716699并且AB最小兩個條件的A和B。()(答案:A563;B1273)program e;var a,x,s,mina,minb:longint;begin writeln; s:=716699; x:=trunc(sqrt(716699); for a:=1 to x do if (716699 mod a=0)and(a+(716699 div a)<s) then begin s:=a+(716699 div a); mina:=a; minb:=(716699 div a); end; writeln('A=',mina,' B='

49、,minb);end.5. 一自然數平方的末幾位與該數相同時,稱此數為自同構數。例如,由于5225,則稱5為自同構數。求出1,700以內的:(1)最大的自同構數;(2)自同構數數目。()(答案:625)7)program e;var i,count:longint;begin writeln; count:=0; for i:=1 to 9 do if (i*i-i) mod 10=0 then inc(count); for i:=10 to 99 do if (i*i-i) mod 100=0 then inc(count); for i:=100 to 700 do if (i*i-i)

50、 mod 1000=0 then begin inc(count); write(i:8); end; writeln; writeln('count=',count);end.6. 若某不含數字0的三位正整數,其平方數至少有三位同樣的數字,則稱該三位數為三重數。例如,由于:5112261121(有三位1),所以511為三重數。求出:()(1)按升序排列第10個三重數;(2)按升序排列前10個三重數之和;(答案:(1)258;(2)1826)program e1;var i,j,k,a,b,c,x,n,count,s:longint; aa:array1.5of integer

51、;begin writeln; s:=0; count:=0; for i:=111 to 316 do begin a:=i div 100; b:=(i div 10) mod 10; c:=i mod 10; if (a<>0)and(b<>0)and(c<>0) then begin x:=i*i; aa1:=x div 10000; aa2:=(x div 1000) mod 10; aa3:=(x div 100) mod 10; aa4:=(x div 10) mod 10; aa5:=x mod 10; for j:=1 to 3 do be

52、gin n:=1; for k:=j+1 to 5 do if aaj=aak then n:=n+1; if n>2 then begin writeln(i:8,x:8); s:=s+i; count:=count+1; break; end; end; end; if count=10 then break; end; writeln(s:8);end.7. 滿足下列兩個條件:(a)千位數字與百位數字相同(非0),十位數字與個位數字相同;(b)是某兩位數的平方。的四位正整數稱為四位平方數。例如,由于:7744882,則稱7744為四位平方數。求出:(1)所有四位平方數的數目;(2)所有四位平方數之和。()(分析:最小四位數1000是31.6的平方,最大的四位數9999是99.9的平方)(答案:1;7744)program

溫馨提示

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

評論

0/150

提交評論