ACM程序設(shè)計(jì)與競(jìng)賽作業(yè)_第1頁
ACM程序設(shè)計(jì)與競(jìng)賽作業(yè)_第2頁
ACM程序設(shè)計(jì)與競(jìng)賽作業(yè)_第3頁
ACM程序設(shè)計(jì)與競(jìng)賽作業(yè)_第4頁
ACM程序設(shè)計(jì)與競(jìng)賽作業(yè)_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、ACM程序設(shè)計(jì)與競(jìng)賽作業(yè)1. 采藥2. 金字塔問題3. 毛毛蟲問題4. Hamming Problem5. 字符串正反連接6. 去掉空格7. 成績(jī)轉(zhuǎn)換8. 金塊問題9. 工資問題10.“水仙花數(shù)”問題11.大小寫轉(zhuǎn)換12.取數(shù)游戲13.整除問題14.警察抓小偷15.n!16.漢諾塔問題17.猴子吃桃問題(遞歸)18. A+B for Input-Output Practice (I)19. A+B for Input-Output Practice (II)20. A+B for Input-Output Practice (III)21. A+B for Input-Output Pract

2、ice (IV)22.埃及分?jǐn)?shù)23.完數(shù)24. Fibbonacci Number _Hdu 207025. Pakets26. 不要62 _Hdu 20891問題 B: 采藥時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 87  解決: 72提交狀態(tài)討論版題目描述辰辰是個(gè)很有潛能、天資聰穎的孩子,他的夢(mèng)想是成為世界上最偉大的醫(yī)師。為此,他想拜附近最有威望的醫(yī)師為師。醫(yī)師為了判斷他的資質(zhì),給他出了一個(gè)難題。醫(yī)師把他帶到個(gè)到處都是草藥的山洞里對(duì)他說:“孩子,這個(gè)山洞里有一些不同的草藥,采每一株都需要一些時(shí)間

3、,每一株也有它自身的價(jià)值。我會(huì)給你一段時(shí)間,在這段時(shí)間里,你可以采到一些草藥。如果你是一個(gè)聰明的孩子,你應(yīng)該可以讓采到的草藥的總價(jià)值最大?!?#160;如果你是辰辰,你能完成這個(gè)任務(wù)嗎?輸入輸入的第一行有兩個(gè)整數(shù)T(1 T 1000)和M(1M 100),T代表總共能夠用來采藥的時(shí)間,M代表山洞里的草藥的數(shù)目。接下來的M行每行包括兩個(gè)在1到100之間(包括1和100)的整數(shù),分別表示采摘某株草藥的時(shí)間和這株草藥的價(jià)值。輸出輸出只包括一行,這一行只包含一個(gè)整數(shù),表示在規(guī)定的時(shí)間內(nèi),可以采到的草藥的最大總價(jià)值。樣例輸入70 371 10069 11 2 樣例輸出3#include "st

4、dio.h"void main() int a1021002=0; int t,t1,m1,m,i,i1,k=1; scanf("%d%d",&t,&m); scanf("%d%d",&t1,&m1); for(i1=1;i1<=t;i1+)/處理第一行 if(i1>=t1) aki1=m1; k+; for(i=2;i<=m;i+) scanf("%d%d",&t1,&m1); for(i1=1;i1<=t;i1+) if(i1<t1)/不可能采

5、的情況; aki1=ak-1i1; else / 可以采的情況 if(ak-1i1>m1+ak-1i1-t1) aki1=ak-1i1; /采完總價(jià)值下降 else aki1=m1+ak-1i1-t1;/值得采的情況; k+; printf("%d",amt);心得:這是一個(gè)動(dòng)態(tài)規(guī)劃的題目,首先定義一個(gè)二維數(shù)組,根據(jù)草藥的性價(jià)比,優(yōu)先采取較高的草藥,如果時(shí)間不夠,則降低性價(jià)比繼續(xù)采取草藥,直至?xí)r間結(jié)束,根據(jù)采集的草藥計(jì)算它的最大值,這題通過比較算出可能采的情況,和不能采的情況,如果能采,那再判斷值不值得采,得出最優(yōu)解。2問題 A: 金字塔問題時(shí)間限制: 1

6、Sec  內(nèi)存限制: 128 MB提交: 54  解決: 32提交狀態(tài)討論版題目描述給一個(gè)金字塔,如上圖所示,請(qǐng)你求出一個(gè)從塔頂?shù)剿椎穆窂?,要求路徑?jīng)過的點(diǎn)的數(shù)字和最小。例如上圖所示的金字塔的最小路徑為:40輸入輸入第一行是一個(gè)整數(shù)n<1000;接下來是n行,第一行一個(gè)數(shù);第二行兩個(gè)數(shù);。第n行n個(gè)數(shù);數(shù)之間用空格分開。數(shù)的鏈接方式如圖所示。輸出一個(gè)數(shù),就是從塔頂?shù)剿椎穆窂降淖钚【嚯x。樣例輸入5912 1510 6 83 18 9 519 7 10 4 16樣例輸出40#include<stdio.h>

7、void main() int i,j,n; int a100100;定義一個(gè)二維數(shù)組; scanf("%d",&n); for(i=1;i<=n;i+) for(j=1;j<=i;j+) scanf("%d",&aij); for(i=n-1;i>=1;i-) for(j=1;j<=i;j+)/從最后一行開始處理; if(ai+1j>ai+1j+1) aij=aij+ai+1j+1; else aij=aij+ai+1j; /求得每次路徑最小值; printf("%d",a11); 心得

8、:這個(gè)題目主要運(yùn)用了動(dòng)態(tài)規(guī)劃的思想,定義一個(gè)二維數(shù)組,把所輸入的數(shù)據(jù)存入進(jìn)去,然后從它的第一行處理,比較相鄰位置數(shù)的大小,取最小的路徑和上一行對(duì)應(yīng)的數(shù)相加,取得最小路徑,進(jìn)行循環(huán),直到求出數(shù)組中a11,即所求的結(jié)果。3問題 B: 毛毛蟲問題時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 32  解決: 16提交狀態(tài)討論版題目描述Mary在她家門口水平種了一排蘋果樹,共有N棵。 突然Mary發(fā)現(xiàn)在左起第P棵樹上(從1開始計(jì)數(shù))有一條毛毛蟲。為了看到毛毛蟲變蝴蝶的過程,Lele在蘋果樹旁觀察了很久。

9、雖然沒有看到蝴蝶,但Lele發(fā)現(xiàn)了一個(gè)規(guī)律:每過1分鐘,毛毛蟲會(huì)隨機(jī)從一棵樹爬到相鄰的一棵樹上。 比如剛開始毛毛蟲在第2棵樹上,過1分鐘后,毛毛蟲可能會(huì)在第1棵樹上或者第3棵樹上。如果剛開始時(shí)毛毛蟲在第1棵樹上,過1分鐘以后,毛毛蟲一定會(huì)在第2棵樹上。 現(xiàn)在告訴你蘋果樹的數(shù)目N,以及毛毛剛開始所在的位置P,請(qǐng)問,在M分鐘后,毛毛蟲到達(dá)第T棵樹,一共有多少種行走方案數(shù)。輸入輸入四個(gè)整數(shù)N P M T。輸出輸出一個(gè)整數(shù),就是行走的方案數(shù)。樣例輸入7 4 4 4樣例輸出6#include<stdio.h>void main() int i,j; int p,m,n,t

10、; int a100100=0;/定義一個(gè)二維數(shù)組; scanf("%d%d%d%d",&n,&p,&m,&t); a0p=1;毛毛蟲剛開始在數(shù)組中的位置; for(i=1;i<=m;i+) for(j=1;j<=n;j+) aij=ai-1j-1+ai-1j+1;/每一步的方案數(shù); printf("%dn",amt);M分鐘后到T棵樹行走的方案數(shù);心得:這一題運(yùn)用了動(dòng)態(tài)規(guī)劃的思想,毛毛蟲的每一步都會(huì)影響下一步的結(jié)果,所以首先按照普通情況找出規(guī)律及其其公式,進(jìn)而算出方案數(shù)。首先定義一個(gè)二維數(shù)組,初始化毛毛蟲的起

11、始位置,然后通過兩個(gè)循環(huán),求出毛毛蟲走每一步的方案數(shù),存在二維數(shù)組中,然后求出第M分鐘到T棵樹行走的方案數(shù)。4問題 A: Hamming Problem時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 61  解決: 23提交狀態(tài)討論版題目描述For each three prime numbers p1, p2 and p3, let's define Hamming sequence Hi(p1, p2, p3), i=1, . as containing in increasing order

12、 all the natural numbers whose only prime divisors are p1, p2 or p3. For example, H(2, 3, 5) = 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, . So H5(2, 3, 5)=6.輸入In the single line of input file there are space-separated integers p1 p2 p3 i.輸出The output file must contain the sin

13、gle integer - Hi(p1, p2, p3). All numbers in input and output are less than 1018.樣例輸入2 3 5 5樣例輸出6#include "stdio.h"int minx(int p1,int p2,int p3)/ 定義有參函數(shù)minx; int min=p1; if(p2<min) min=p2; if(p3<min) min=p3; return min;/求p1,p2,p3的最小值;int main() int p1,p2,p3,t,i; int a,b,c; char num1

14、0000; scanf("%d%d%d%d",&p1,&p2,&p3,&t); a=b=c=0; num0=1; for(i=1;i<=t;i+) numi=minx(p1*numa,p2*numb,p3*numc);/調(diào)用minx函數(shù); if(numi=p1*numa) a+; if(numi=p2*numb) b+; if(numi=p3*numc) c+; 求所有的能被p1,p2,p3整除的數(shù); printf("%dn",numt); return 0; 心得:運(yùn)用動(dòng)態(tài)規(guī)劃的思想,定義一個(gè)一維數(shù)組,把所有符合條

15、件的數(shù)按順序存進(jìn)一維數(shù)組中,這個(gè)編程運(yùn)用了函數(shù)調(diào)用的方法求三個(gè)數(shù)的最小值,然后把這個(gè)最小值存進(jìn)一維數(shù)組中,每次存進(jìn)一個(gè)數(shù),下次都會(huì)用存進(jìn)去的這個(gè)數(shù)求解下一個(gè)數(shù),進(jìn)行循環(huán)。5問題 B:字符串正反連接時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 68  解決: 42提交狀態(tài)討論版題目描述所給字符串正序和反序連接,形成新串并輸出輸入任意字符串(長度<=50)輸出字符串正序和反序連接所成的新字符串樣例輸入123abc樣例輸出123abccba321#include<stdio.h>#inclu

16、de<string.h>void main()char a50;/定義一個(gè)字符串;int i,f;while(scanf("%s",&a)!=EOF)/實(shí)現(xiàn)多行實(shí)例輸入; f=strlen(a);/把字符串的長度值賦給f; for(i=0;i<f;i+) printf("%c",ai);/把字符串正序輸出; for(i=f-1;i>=0;i-) printf("%c",ai);/把字符串反序輸出; printf("n");心得:定義一個(gè)字符串,運(yùn)用strlen()函數(shù)獲取字符串的長度

17、值f,首先用for循環(huán),把這個(gè)字符串正序輸出,然后再用for循環(huán)對(duì)這個(gè)字符串進(jìn)行反序輸出,這里主要考察了輸入輸出。6問題 C: 去掉空格時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 27  解決: 4提交狀態(tài)討論版題目描述讀入一些字符串,將其中的空格去掉。輸入輸入為多行,每行為一個(gè)字符串,字符串只由字母、數(shù)字和空格組成,長度不超過80。輸入以“End of file”結(jié)束。輸出對(duì)于每行輸入,輸出轉(zhuǎn)換后的字符串。樣例輸入Hello World1 2 3Nice to meet youabc樣例輸出Hell

18、oWorld123Nicetomeetyouabc提示用scanf是不能讀入一行有空格的字符串的,用gets吧。 用“gets(str) != NULL”可以判斷輸入是否結(jié)束,如果此條件為假(即gets(str) = NULL),則表示輸入結(jié)束(對(duì)于本題)。#include<stdio.h>#include<string.h>void main()int i,f;char a90;/定義一個(gè)字符串;while(gets(a)!=NULL)f=strlen(a);/把字符串的長度值賦給f; for(i=0;i<f;i+) if(ai=' ')prin

19、tf("%c",ai+1);/去掉空格;i=i+1;elseprintf("%c",ai);/沒有空格,直接輸出; printf("n");心得:這里也是主要考察輸入輸出問題,首先也是定義了一個(gè)字符串,用strlen()函數(shù)獲得字符串的長度f,進(jìn)行f次循環(huán),判斷這個(gè)字符串是否有空格?如果有把數(shù)組中的每個(gè)數(shù)往后進(jìn)一位,即去點(diǎn)空格,如果沒有直接輸出。7問題 D: 成績(jī)轉(zhuǎn)換時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 78  解決: 30提交狀態(tài)討論

20、版題目描述輸入一個(gè)百分制的成績(jī)t,將其轉(zhuǎn)換成對(duì)應(yīng)的等級(jí),具體轉(zhuǎn)換規(guī)則如下: 90100為A; 8089為B; 7079為C; 6069為D; 059為E; 輸入輸入數(shù)據(jù)有多組,每組占一行,由一個(gè)整數(shù)組成。輸出對(duì)于每組輸入數(shù)據(jù),輸出一行。如果輸入數(shù)據(jù)不在0100范圍內(nèi),請(qǐng)輸出一行:“Score is error!”。樣例輸入5667100123樣例輸出EDAScore is error!提示#include<stdio.h>int main()int x;while(scanf("%d",&x)!

21、=EOF)/實(shí)現(xiàn)多行實(shí)例輸入;if(x<60)printf("En");else if(x<70)printf("Dn");else if(x<80)printf("Cn");else if(x<90)printf("Bn");else if(x<=100)printf("An");else printf("Score is error!n");/分?jǐn)?shù)轉(zhuǎn)換為等級(jí);return 0;心得:這里主要運(yùn)用了選擇語句,用while(scanf("

22、;%d",&x)!=EOF)語句實(shí)現(xiàn)多行實(shí)例輸入,然后把所輸入的分?jǐn)?shù)通過if語句進(jìn)行判斷,轉(zhuǎn)換成相應(yīng)的等級(jí),輸出。8問題 A: 金塊問題時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 92  解決: 71提交狀態(tài)討論版題目描述老板有一袋金塊(共n塊,n是2的冪(n>=2),最優(yōu)秀的雇員得到其中最重的一塊,最差的雇員得到其中最輕的一塊。假設(shè)有一臺(tái)比較重量的儀器,希望用最少的比較次數(shù)找出最重和最輕的金塊。輸入輸入共兩行,第一行輸入金塊的數(shù)量N<100000;第二行N金塊的重量,用

23、空格間隔。輸出兩個(gè)數(shù)用空格分開,最重金塊 最輕金塊樣例輸入53 7 9 6 4樣例輸出9 3#include<stdio.h>int main()int n,a100000;int max,min,i;while(scanf("%d",&n)!=EOF)/實(shí)現(xiàn)多行實(shí)例輸入;for(i=0;i<n;i+)scanf("%d",&ai);max=min=a0;/把數(shù)組a0的值賦給max和min;for(i=1;i<n;i+)if(ai>max)max=ai;/求最最重的金塊;for(i=1;i<n;i+)i

24、f(ai<min)min=ai;/求最輕的金塊;printf("%d %dn",max,min);return 0;心得:這題主要運(yùn)用分治算法的思想,把一個(gè)大問題分成一個(gè)個(gè)小的子問題去求解,這個(gè)題目是典型的二分法問題,把這個(gè)題分成兩個(gè)小問題,即求最重的和求最輕的金塊,首先定義了一個(gè)一維數(shù)組,把所有金塊的質(zhì)量存入其中,把數(shù)組的初始值賦給最重的和最輕的金塊,然后運(yùn)用循環(huán)對(duì)數(shù)組中每個(gè)金塊的質(zhì)量與金塊的初始值進(jìn)行比較,求的最重和最輕的金塊,然后輸出。9問題 B: 工資問題時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 

25、;121  解決: 74提交狀態(tài)討論版題目描述某單位給每個(gè)職工發(fā)工資(精確到元),為了保證不要臨時(shí)兌換零錢,且取款的張數(shù)最少,取工資前要統(tǒng)計(jì)出所有職工的工資所需各種 幣值(100,50,20,10,5,2,1元共7種)的張數(shù),請(qǐng)編程完成。輸入輸入一個(gè)工資數(shù)<10000元輸出輸出各個(gè)幣種的張數(shù),沒有的用0代替,中間用空格分開樣例輸入173樣例輸出1 1 1 0 0 1 1#include<stdio.h>int main()int j,z,a;int b7=100,50,20,10,5,2,1;/把所有幣值按從從大到小的順序存到一位數(shù)組中;int

26、s7=0;/定義一個(gè)一位數(shù)組,元素值全為0;scanf("%d",&z); for(j=0;j<7;j+) a=z/bj; sj=a;z=z-a*bj; /求需要各個(gè)幣值的個(gè)數(shù); printf("%d",s0); for(j=1;j<7;j+) printf(" %d",sj);/輸出需要各個(gè)幣值的個(gè)數(shù);return 0;心得:這個(gè)題主要運(yùn)用貪婪算法的方法,利用可行的策略,求出可行解的一個(gè)解元素由所有解元素合成問題的一個(gè)可行解。要想取得的張數(shù)最少,可以先考慮幣值最大的進(jìn)行分發(fā),然后再取更小鈔票的幣值。依次取之。首先

27、定義一個(gè)一維數(shù)組,把幣值從大到小存進(jìn)去,運(yùn)用一循環(huán),把每次算的錢數(shù)的結(jié)果,依次對(duì)數(shù)組的幣值進(jìn)行取整。然后依次存入數(shù)組輸出。10問題 C: "水仙花數(shù)"問題1時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 138  解決: 75提交狀態(tài)討論版題目描述判斷一個(gè)數(shù)是否為"水仙花數(shù)",所謂"水仙花數(shù)"是指這樣的一人數(shù):其各位數(shù)字的立方和等于該數(shù)本身。例如:371是一個(gè)"水仙花數(shù)",371=33+73+13.輸入一個(gè)三位數(shù)輸出1或者0(

28、1代表此數(shù)為水仙花數(shù),0代表此數(shù)不是水仙花數(shù))樣例輸入371樣例輸出1#include<stdio.h>void main() int n,x,y,z; scanf("%d",&n); x=n/100;/求三位數(shù)的百位數(shù)字; z=n%10;/求三位數(shù)的個(gè)位數(shù)字; y=(n-(x*100+z)/10;/求三位數(shù)的十位數(shù)字; if(n=x*x*x+y*y*y+z*z*z) printf("%d",1); else printf("%d",0);/判斷這個(gè)三位數(shù)是否為水仙花數(shù),是輸出1,否輸出2;心得:首先,輸入一個(gè)三位

29、數(shù),運(yùn)用對(duì)這個(gè)數(shù)取整,取余,運(yùn)用數(shù)學(xué)公式,分別算出它的百位,十位,和個(gè)位的數(shù)字,然后判斷這三個(gè)數(shù)字的平方和是否等于這個(gè)三位數(shù),如果是,輸出1,如果不是輸出0.11問題 E: 大小寫轉(zhuǎn)換時(shí)間限制: 1000 Sec  內(nèi)存限制: 65536 MB提交: 182  解決: 116提交狀態(tài)討論版題目描述讀入一些字符串,將其中的小寫字母轉(zhuǎn)成大寫字母(其他字符不變)。輸入輸入為多行,每行為一個(gè)字符串,字符串只由字母和數(shù)字組成,長度不超過80。輸入以“End of file”結(jié)束。輸出對(duì)于每行輸入,輸出轉(zhuǎn)換后的字符串。樣例輸入

30、HelloICPC200412345abcde樣例輸出HELLOICPC200412345ABCDE#include<stdio.h>#include<string.h>void main()int j;char string80;/定義一個(gè)字符串; while(scanf("%s",&string)!=EOF)/實(shí)現(xiàn)多行實(shí)例輸入;for(j=0;j<80;j+) if(stringj>='a')&&(stringj<='z') stringj=stringj-32;/實(shí)現(xiàn)字母

31、大小寫轉(zhuǎn)換; printf("%sn",string);心得:這個(gè)題目主要考察輸入輸出,還有大小寫轉(zhuǎn)換問題,首先還是定義一個(gè)字符串,用while(scanf("%s",&string)!=EOF)語句實(shí)現(xiàn)多行實(shí)例輸入,對(duì)這個(gè)字符串進(jìn)行循環(huán),如果這個(gè)字符串有大寫的話,轉(zhuǎn)化成小寫的,如果有小寫的話,那么轉(zhuǎn)化成大寫的。12問題 B: 取數(shù)游戲時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 46  解決: 39提交狀態(tài)討論版題目描述有2個(gè)人輪流取2n個(gè)數(shù)中的n個(gè)數(shù),

32、所取數(shù)之和大者為勝,請(qǐng)編寫算法,讓先取數(shù)者勝,模擬取數(shù)過程。輸入輸入兩行,第一行一個(gè)整數(shù)N<100000;第二行N個(gè)數(shù),用空格分開。輸出輸出取勝人取數(shù)和。失敗人取數(shù)的和,空格分開。樣例輸入61 2 3 4 5 6樣例輸出12 9#include<stdio.h>int main()int n,i,sum1,sum2,a100000;while(scanf("%d",&n)!=EOF)/實(shí)現(xiàn)多行實(shí)例輸入;sum1=sum2=0;for(i=0;i<n;i+)scanf("%d",&ai);for(i=0;i<n

33、;i=i+2)sum1=sum1+ai;for(i=1;i<n;i=i+2)sum2=sum2+ai;/隔數(shù)取數(shù)求和:sum1,sum2;if(sum1>sum2)printf("%d %dn",sum1,sum2);elseprintf("%d %dn",sum2,sum1);/順序輸出取勝人取數(shù)和。失敗人取數(shù)和;return 0;心得;這題主要運(yùn)用貪心算法的思想,要想先取數(shù)人獲勝,就得讓這個(gè)人每一步都盡可能取得最大的數(shù),這樣他取數(shù)的和才會(huì)總體大于后取數(shù)的那個(gè)人的取數(shù)和。首先定義一個(gè)一維數(shù)組,把要取得數(shù)從小到大的順序放在里面,然后一個(gè)人從第

34、一個(gè)按照隔一個(gè)數(shù)取,求和sum1;另一個(gè)人從第二個(gè)按照隔一個(gè)人取,求和sum2,比較sum1和sum2的最大值,輸出。13問題 C: 整除問題時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 70  解決: 44提交狀態(tài)討論版題目描述編寫算法對(duì)輸入的一個(gè)整數(shù),判斷它能否被3,5,7整除,并輸出以下信息之一:能同時(shí)被3,5,7整除;能被其中兩個(gè)數(shù)(要指出哪兩個(gè))整除;能被其中一個(gè)數(shù)(要指出那一個(gè))整除;不能被3,5,7任一個(gè)整除;輸入輸入一個(gè)整數(shù)<100000;輸出如果都能整除輸出“all"如

35、果都不能整除輸出"nonel"如果能被3和5整除則輸出“3 5”。中間有一個(gè)空格,注意按由小到大輸出。樣例輸入35樣例輸出5 7#include<stdio.h>void main()long n; int k;scanf("%d",&n);k=(n%3=0)+(n%5=0)*2+(n%7=0)*4);/判斷整數(shù)是否能被2,3,5整除;switch(k)case 7:printf("all");break;case 6:printf("5 7");break;case 5:printf(&quo

36、t;3 7");break;case 4:printf("4");break;case 3:printf("3 5");break;case 2:printf("5");break;case 1:printf("3");break;case 0:printf("none");break;/用switch語句輸出結(jié)果;心得:這題主要考察輸入輸出問題,首先輸入一個(gè)整數(shù),運(yùn)用語句k=(n%3=0)+(n%5=0)*2+(n%7=0)*4),判斷這個(gè)數(shù)能否被2,3,5整除,用switch語句輸

37、出所有可能發(fā)生的結(jié)果,然后輸出題目中所要求輸出的結(jié)果,其中用switch語句起到了優(yōu)化算法的作用。14問題A警察抓小偷時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 115  解決: 88提交狀態(tài)討論版題目描述警察局抓了a,b,c,d,4名小偷嫌疑犯,其中只有一個(gè)人是小偷,審問中,a說:我不是小偷,b說:c是小偷,c說:小偷肯定是d,d說:c在冤枉人。 現(xiàn)在已經(jīng)知道4個(gè)人中3人說的是真話,一人說的是假話,問到底誰是小偷。輸入輸出小偷是c樣例輸入樣例輸出小偷是c#include<stdio.h>

38、void main()int x;for(x=1;x<=4;x+)/執(zhí)行4次循環(huán);if(x!=1)+(x=3)+(x=4)+(x!=4)=3)/判斷是否有三個(gè)人說真話的情況;printf("%c",64+x);心得:這個(gè)題目主要考察把文字信息轉(zhuǎn)化為數(shù)字信息,即信息數(shù)字化,把A,B,C,D看成1,2,3,4;x定義為小偷,然后把A,B,C,D四人所說的話變成數(shù)字語言,判斷當(dāng)他們四個(gè)人有三個(gè)人說真話的情況,然后以把數(shù)字變成字母輸出。15問題 B: n!時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 262

39、0; 解決: 162提交狀態(tài)討論版題目描述輸入一個(gè)整數(shù)N,輸出它的階乘。輸入輸入一個(gè)整數(shù)<20;輸出輸出它的階乘樣例輸入5樣例輸出120提示#include<stdio.h>int main()int add(int m);/對(duì)add函數(shù)進(jìn)行聲明;int n,sum;scanf("%d",&n);sum=add(n);printf("%dn",sum);return 0;int add(int n)/定義add函數(shù)int f; if (n=0|n=1)f=1;/判斷當(dāng)n等于0和1這兩種情況;else f=n*

40、add(n-1);/調(diào)用add函數(shù)求值;return f;心得:這里主要運(yùn)用函數(shù)的遞歸調(diào)用,首先用if對(duì)輸入的數(shù)進(jìn)行判斷,看是否為1和0,如果是,那么輸出其階乘等于1,如果不是那么調(diào)用函數(shù)f=n*add(n-1)進(jìn)行求值,add函數(shù)總共被調(diào)用了n次,求得最后的結(jié)果,輸出。16漢諾塔問題時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 224  解決: 138提交狀態(tài)討論版題目描述把N個(gè)盤子從A柱子借助B柱子移到C柱子,要求每次只能移動(dòng)一個(gè)盤子,并且小盤子不能放到大盤子上。問如何移動(dòng)。輸入輸入盤子的個(gè)數(shù)N(&

41、lt;=10)輸出輸出移動(dòng)的次數(shù)。樣例輸入3樣例輸出7提示#include<stdio.h>int main() int i,j,n,sum; scanf("%d",&n); j=1; if(n!=1)/去除盤子的個(gè)數(shù)為1的情況;for(i=1;i<=n;i+) j=j*2; sum=j-1;/求盤子移動(dòng)的次數(shù); else sum=1; printf("%d",sum); return 0; 心得:這題主要考察循環(huán)與遞歸問題,先假設(shè)盤子的個(gè)數(shù),取幾個(gè)特殊值,找出移動(dòng)盤子次數(shù)的規(guī)律。這個(gè)編程首先判斷盤子個(gè)數(shù),如果是1,則輸出1次,

42、如果不是1,執(zhí)行n次循環(huán),求得j,然后求出移動(dòng)盤子的次數(shù)j-1,輸出。17問題 D: 猴子吃桃子問題(遞歸)時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 98  解決: 87提交狀態(tài)討論版題目描述一只猴子摘了若干桃子,每天吃現(xiàn)有桃子的一半多一個(gè),到第10天時(shí)就只有一個(gè)桃子了,求原來有多少個(gè)桃。輸入輸出輸出原來的桃子數(shù)樣例輸入樣例輸出提示#include<stdio.h>int main()int i,x=1;for(i=9;i>0;i-)/執(zhí)行9次循環(huán);x=(x+1)*2;/求每天桃子

43、的個(gè)數(shù);printf("%dn",x);return 1;心得:這個(gè)題目運(yùn)用數(shù)學(xué)中倒推的方法求得,先求出第10天桃子的個(gè)數(shù),然后再求出前一天桃子的個(gè)數(shù),直到求出第1天桃子的個(gè)數(shù),找出其規(guī)律。設(shè)桃子的個(gè)數(shù)為x,則每天剩余桃子的個(gè)數(shù)滿足公式x=(x+1)*2,再用一個(gè)for循環(huán)求出原來的桃子數(shù)。18問題 A: A+B for Input-Output Practice (I)時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 402  解決: 183提交狀態(tài)討論版題目描述Your task i

44、s to Calculate a + b. Too easy?! Of course! I specially designed the problem for acm beginners. You must have found that some problems have the same titles with this one, yes, all these problems were designed for the same aim.輸入The input will consist of a series of pairs of integers a and

45、b, separated by a space, one pair of integers per line.輸出For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.樣例輸入1 510 20樣例輸出630提示#include<stdio.h>void main()int a,b,s;while(scanf("%d%d",&a,&

46、amp;b)!=EOF)/實(shí)現(xiàn)多行實(shí)例輸入;s=a+b;/求a和b的和;printf("%dn",s); 心得:這個(gè)題主要考察了輸入和輸出問題,目的是計(jì)算整數(shù)a和b的和,首先用while(scanf("%d%d",&a,&b)!=EOF)語句實(shí)現(xiàn)多行實(shí)例輸入,然后求出a和b的和,輸出。19A+B for Input-Output Practice (II)時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 310  解決: 179提交狀態(tài)討論版題目描述Y

47、our task is to Calculate a + b.輸入Input contains an integer N in the first line, and then N lines follow. Each line consists of a pair of integers a and b, separated by a space, one pair of integers per line.輸出For each pair of input integers a and b you should output the sum of a and b in one line, a

48、nd with one line of output for each line in input.樣例輸入21 510 20樣例輸出630提示提交狀態(tài)討論版#include<stdio.h>void main() int a,b,n; scanf("%d",&n); while(n-)/限制求和的次數(shù); scanf("%d%d",&a,&b);/輸入a,b; printf("%dn",a+b);/求a,b的和; 心得:這個(gè)題目主要考察了輸入輸出問題,題目要求第一行輸入要輸入要計(jì)算和的數(shù)量,用whi

49、le(n-)語句滿足了題目的要求,即執(zhí)行n次,然后就是輸入a和b,接著求出和,輸出。20問題 C: A+B for Input-Output Practice (III)時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 314  解決: 169提交狀態(tài)討論版題目描述Your task is to Calculate a + b.輸入Input contains multiple test cases. Each test case contains a pair of integers a and b, o

50、ne pair of integers per line. A test case containing 0 0 terminates the input and this test case is not to be processed.輸出For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.樣例輸入1 510 200 0樣例輸出630#include<std

51、io.h> void main()int a,b;while(scanf("%d%d",&a,&b)!=EOF&&!(a=0&&b=0)/*實(shí)現(xiàn)多行實(shí)例輸入,當(dāng)a,b都為0時(shí)結(jié)束*/printf("%dn",a+b);/求a,b的和;心得:這個(gè)題目也是輸入輸出問題,目的也是求出a和b的和,然后按要求輸入輸出,對(duì)于輸入:while(scanf("%d%d",&a,&b)!=EOF&&!(a=0&&b=0)運(yùn)用這個(gè)語句實(shí)現(xiàn)多行實(shí)例輸入,如

52、果輸入0 0,則結(jié)束,然后求得a和b的和,輸出。21問題 D: A+B for Input-Output Practice (IV)時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 287  解決: 166提交狀態(tài)討論版題目描述Your task is to Calculate the sum of some integers.輸入Input contains multiple test cases. Each test case contains a integer N, and then N integ

53、ers follow in the same line. A test case starting with 0 terminates the input and this test case is not to be processed.輸出For each group of input integers you should output their sum in one line, and with one line of output for each line in input.Sample Input樣例輸入4 10 2 3 405 11 2 8 5 50 樣例輸出5531提示#i

54、nclude<stdio.h> void main()int a,s;int n=1;while(n!=0)scanf("%d",&n);if(n=0)break; / 判斷n是否為斷0,是結(jié)束,不是執(zhí)行下面語句;s=0;for(int i=0;i<n;i+)/執(zhí)行n次循環(huán);scanf("%d",&a);s=s+a;/每次循環(huán)求和; printf("%dn",s);心得:同樣,這個(gè)題目也是主要考察了輸入輸出問題,計(jì)算一些整數(shù)的和,并按指定的格式輸出,首先輸入一些整數(shù)判斷是否都為0,如果是,則結(jié)束,如果

55、不是則執(zhí)行循環(huán),把所有輸入的整數(shù)相加,然后輸出。22問題 B: 埃及分?jǐn)?shù)時(shí)間限制: 1 Sec  內(nèi)存限制: 128 MB提交: 21  解決: 11提交狀態(tài)討論版題目描述       設(shè)計(jì)一個(gè)算法,把一個(gè)真分?jǐn)?shù)表示為最少埃及分?jǐn)?shù)之和的形式,所謂埃及分?jǐn)?shù),是指分子為1的分?jǐn)?shù)。           如7/8=1/2+1/3+1/24。輸入輸入兩個(gè)整數(shù),第一個(gè)表

56、示分子,第二個(gè)數(shù)表示分母。輸出輸出埃及分?jǐn)?shù)之和,按分母有小到大的順序,中間用空格分開。樣例輸入7 8樣例輸出2 3 24提示#include<stdio.h>int main()int a,b,c;while(scanf("%d %d",&a,&b)!=EOF)/實(shí)現(xiàn)多行實(shí)例輸入;if(a=1|b%a=0)printf("%dn",b/a);/如果這個(gè)數(shù)為1或分子為1,輸出分母的值;while(a!=1) c=b/a+1; a=a*c-b; b=b*c; printf("%d ",c);/通過公式求出埃及分?jǐn)?shù)。 if(b%a=0|a=1) printf("%dn",b/a); a=1; return 0;心得:首先通過while語句實(shí)現(xiàn)多行實(shí)例輸入,首先輸入這是分?jǐn)?shù)的的分子分母,判斷這個(gè)數(shù)是否為1或這個(gè)數(shù)的分子為1,如果是,直接輸出分母的值;接

溫馨提示

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

評(píng)論

0/150

提交評(píng)論