版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Problem A: Hello world!DescriptionXiao_ming有兩個(gè)哥哥,大哥叫 Da_min,二哥叫Er_min。三兄弟放學(xué)回家,父母分別跟他 們打招呼。Input無Output請(qǐng)輸出:Hello Da_min,Hello Er_min,Hello Xiao_ming!Sample InputSample OutputHello Da_min, Hello Er_min, Hello Xiao_ming!HINT請(qǐng)注意換行符#include int main()printf(Hello Da_min,nHello Er_min,nHello Xiao_ming!);P
2、roblem A:算術(shù)基本運(yùn)算Description計(jì)算兩整數(shù)x和y (0x,y1000 )的和、差、積、商、余數(shù)、x的平方和y的三次方。Input輸入只有一行,格式見 sample oOutput輸出為多行,按順序每行輸出 x,y的和、差、積、商、余數(shù)、 x的平方和y的三次方,格 式見sampleSample Inputx = 11, y = 3Sample Outputx + y : 14x - y : 8x * y : 33x / y quotient: 3, remainder: 2xA2 : 121y a 3 : 27HINT注意輸入輸出格式。了解 C語言整數(shù)除法運(yùn)算符的特點(diǎn),并且沒
3、有求哥的運(yùn)算符。#include int main()int x,y;scanf (x = %d, y = %d,&x,&y);printf (x + y : %dn,x+y);printf (x - y : %dn,x-y);printf (x * y : %dn,x*y);printf (x / y quotient: %d, remainder: %dn”,x/y,x%y);printf(x A 2 : %dn,x*x);printf (y a 3 : %dn,y*y*y);Problem B:求圓的面積和周長Description從鍵盤輸入圓的半徑,求圓的面積和周長,圓周率取3.14。
4、Input輸入一個(gè)浮點(diǎn)型數(shù)據(jù),有效數(shù)字不會(huì)超過十進(jìn)制的6位。Output輸出為兩行。第一行為圓的面積,第二行為圓的周長,格式見 sampleo3Sample OutputArea: 28.260000Perimeter: 18.840000HINT了解浮點(diǎn)類型的輸入、輸出和算術(shù)運(yùn)算符#include #define PI 3.14int main()float r,Area,Perimeter;scanf (%f,&r);Area=PI*r*r;Perimeter=2*PI*r;printf (Area: %fn,Area);printf (Perimeter: %fn,Perimeter);
5、Problem C:平均值Description求3個(gè)數(shù)的平均值。輸入只有一行,為 3個(gè)較小的整數(shù)。Output輸出為這3個(gè)整數(shù)的平均值,保留 3位小數(shù)。Sample Input1 2 3Sample Output2.000#include int main()int x,y,z;float a;scanf (%d %d %d,&x,&y,&z);a=(x+y+z)/3.0;printf (%.3f,a);Problem D:貨幣兌換Description給出人民幣對(duì)美元、歐元、日元的當(dāng)日匯率,求給定金額的人民幣能兌換成外幣的金額, 求給定金額的外幣能兌換成人民幣的金額。要計(jì)算的外幣有三種:美
6、元、歐元、日元。Input輸入有三行。第一行依次為美元、歐元、日元外幣匯率,用空格分開。匯率用 100外幣為單位,精確到小數(shù)點(diǎn)后4位,如668.5200表示“100美元=668.5200人民幣”。匯率浮動(dòng)圍為(0,10000)。第二行為外幣金額 x,第三行為人民幣金額v。x,y均為整數(shù),且0x,y10000 。Output輸出為兩行。第一行為金額為x的美元、歐元、日元兌換成人民幣的金額,用空格分開。 第二行為金額為y的人民幣兌換成美元、歐元、日元的金額,用空格分開。 所有金額精確到小數(shù)點(diǎn)后兩位。Sample Input668.5200 908.0685 7.985215001500Sample
7、 Output10027.80 13621.03 119.78224.38 165.19 18784.75HINT了解浮點(diǎn)數(shù)據(jù)類型的精確度和輸出控制。#include int main()double i,j,k,a,b,c,d,e,f;double x,y;scanf (%lf %lf %lf,&i,&j,&k);scanf (%lf%lf,&x,&y);a=x/100*i;b=y/100*j;c=x/100*k;d=y*100/i;e=y*100/j;f=y*100/k;printf (%.21f %.2lf %.2lfn,a,b,c);printf (%.21f %.21f %.21fn
8、,d,e,f);Problem E:求字符的值Description從鍵盤輸入3個(gè)字符(不含雙字節(jié)字符),分別輸出每個(gè)字符的十進(jìn)制值( ASCII碼)、 八進(jìn)制值和十六進(jìn)制值。Input輸入為3個(gè)字符。Output輸出為3行。每一行為每個(gè)字符(對(duì)應(yīng)輸入順序)的十進(jìn)制、八進(jìn)制和十六進(jìn)制值,用空格分隔開。每個(gè)輸出的值占3個(gè)字符,不足3個(gè)字符前面補(bǔ)0。Sample Input0 ASample Output048 060 030 032 040 020065 101 041HINT了解字符值的存儲(chǔ)和整型的關(guān)系。#include int main()char x,y,z;scanf (%c%c%c,&
9、x,&y,&z);printf (%.3d %.3o %.3xn,x,x,x);printf (%.3d %.3o %.3xn,y,y,y);printf (%.3d %.3o %.3xn,z,z,z);Problem F:奇數(shù)還是偶數(shù)?Description輸入一個(gè)整數(shù),判讀它是奇數(shù)還是偶數(shù)。Input輸入只有一行,為一個(gè) 100以的正整數(shù)。Output輸出為一行。若輸入為偶數(shù)則輸出“ even”,奇數(shù)輸出“ odd”。Sample Input30Sample OutputevenHINT用整數(shù)運(yùn)算可以解決,練習(xí)“ ?:”表達(dá)式。#include int main()int x;scanf
10、(%d,&x);x%2=0?printf (even):printf (odd);Problem G:絕對(duì)值Description求整型數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)的絕對(duì)值。Input輸入兩個(gè)數(shù),第一個(gè)是整數(shù),第二個(gè)是浮點(diǎn)數(shù)。輸出為兩行,第一行為整數(shù)的絕對(duì)值,第二行為浮點(diǎn)數(shù)的絕對(duì)值,注意浮點(diǎn)數(shù)的絕對(duì)值不 輸出無意義的0。Sample Input-i iSample OutputHINT求絕對(duì)值可以用標(biāo)準(zhǔn)庫函數(shù)來完成,也可以自己判斷。注意浮點(diǎn)數(shù)的輸出格式。求絕對(duì)值 的函數(shù)在哪個(gè)頭文件?貌似很多人會(huì)搞錯(cuò),包括很多編書的人!#include int main()int x;float y;scanf (%d%f
11、,&x,&y);x=0?printf(%dn,x):printf(%dn,-x);y=0?printf(%g,y):printf(%g,-y);Problem A:簡單的打折計(jì)算Description商店規(guī)定:消費(fèi)滿 n元,可以打八八折。設(shè)某件商品標(biāo)價(jià)m元,輸入購買的件數(shù) x,計(jì)算出需要支付的金額(單位:元),精確到分。Input輸入只有一行,三個(gè)整數(shù) m n和x,且0xmn100QbOutput輸出金額,精確到分。Sample Input95 300 4Sample Output334.40HINT了解浮點(diǎn)型的輸出控制,注意整型和浮點(diǎn)型混合運(yùn)算過程中的數(shù)據(jù)類型轉(zhuǎn)換。#include int
12、main()int m,n,x;float s;scanf (%d %d %d,&m,&n,&x);if (m*x=n)s=m*x*0.88;elses=m*x;printf (%.2f,s);Problem B:判斷閏年Description輸入一個(gè)正整數(shù)的年份,判斷是否為閏年。Input輸入只有一行,為一個(gè) 10000以的正整數(shù)。Output輸出為一行。若輸入為閏年偶數(shù)則輸出“ Yes”,否則輸出“ No。Sample Input2010Sample OutputNoHINT了解邏輯運(yùn)算符和關(guān)系運(yùn)算符。#include int main()int y;scanf (%d,&y);if(y%
13、4=0&y%100!=0|y%400=0)printf (Yes);elseprintf (No);Problem C:水仙花數(shù)Description如果一個(gè)三位十進(jìn)制數(shù)等于其各位數(shù)字的立方和,則稱這個(gè)數(shù)為水仙花數(shù)。如: 13+53+33=153。Input一個(gè)整數(shù) x, 100=x=999。Outputx是水仙花數(shù),則輸出“ YES ,否則為“NO 。Sample Input153Sample OutputYESHINT#include int main()int x,a,b,c;scanf (%d,&x);a=x%10;b=x/10%10;c=x/100;if(a*a*a+b*b*b+c*
14、c*c=x)printf (YES);elseprintf (NO);Problem A:多少鈔票Description客戶去商店買東西時(shí),不超過100美金的賬單喜歡用現(xiàn)金支付。商店喜歡用最少的鈔票給付客戶的找零。請(qǐng)你編寫一個(gè)程序幫助商店計(jì)算出:當(dāng)客戶買了x元商品給了一100美元的鈔票后,商店應(yīng)該付給客戶多少20美元、10美元、5美元和1美元的鈔票,使得鈔票總數(shù)最少。假設(shè)不存在其他面值的鈔票,也不會(huì)有幾角幾分的價(jià)格,商店的各種鈔 票總是夠用的。Input輸入一個(gè)整數(shù) x, 0x100。Output按順序輸出20美金、10美金、5美金和1美金面值的鈔票數(shù)。輸出格式見 sample。Sample
15、Input7Sample Output$20 bills: 4$10 bills: 1$5 bills: 0$1 bills: 3HINT當(dāng)能支付大面值鈔票時(shí)不要支付更小面值的鈔票,才能滿足鈔票總數(shù)最少,注意scanf()格式的控制。#include int main()int x,s,a,b,c,d;scanf (%d,&x);s=100-x;a=s/20;b=(s-20*a)/10;c=(s-20*a-10*b)/5;d=s-20*a-10*b-c*5;printf ($20 bills: %dn,a);printf ($10 bills: %dn,b);printf ( $5 bills
16、: %dn,c);printf ( $1 bills: %dn,d);Problem B:自動(dòng)撥出的程序Description某外國銷售公司需要向國的一些大型單位打推銷產(chǎn)品。這個(gè)公司的工作場(chǎng)景是這樣 推銷員坐在自己電腦旁邊,通過一款自動(dòng)撥的軟件與客戶聯(lián)系。所有需要被撥打的都事先 存儲(chǔ)在服務(wù)器上,推銷員不需要每次都很麻煩的輸入客戶的,當(dāng)推銷員點(diǎn)擊軟件里撥打的 按鈕,下一個(gè)將會(huì)自動(dòng)撥出?,F(xiàn)在你需要編寫個(gè)程序來模擬這個(gè)自動(dòng)撥軟件的工作過程。是按照中國的習(xí)慣存儲(chǔ) 下來的,可能是從上抓取的,也可能是掃描的手寫件。不過它們都被按照這樣的格式存儲(chǔ) 下來:(城市區(qū)號(hào))分區(qū)前綴-分機(jī)號(hào)比如的一個(gè)大型單位的某部是
17、 (0532)621-15486,是指如果在單位部直接撥打15486就行,在的其他地方要撥打 62115486,而在要撥打6。根據(jù)常識(shí),先撥 0就是要轉(zhuǎn)外線,所以一 般的各個(gè)部分都不會(huì)以 0開頭。你的程序可以把如上格式的翻譯成一個(gè)只包含有數(shù)字的串,發(fā)送給機(jī)并撥出。值得 注意的是中國的城市區(qū)號(hào)長度并不相同,比如是010。再有不同城市的位數(shù)也不相同,并且不同單位根據(jù)部分機(jī)數(shù)目多少,有的可能只有3位分機(jī),有的可能分區(qū)前綴號(hào)會(huì)只有2位。但不管怎樣中國現(xiàn)在還沒有哪個(gè)城市的超過十位數(shù)的。中國的國際區(qū)號(hào)是0086。這里不含像114這樣的特服。Input輸入只有一行,是符合“(城市區(qū)號(hào))分區(qū)前綴-分機(jī)號(hào)”規(guī)律
18、的,這里面除了英文字符 飛”、“)”、“-”之外只有數(shù)字。Output輸出只有一行,是帶中國區(qū)號(hào)的能。注意從國外打國的,城市區(qū)號(hào)前面的 的。比如中國的國際分區(qū)號(hào)是 0086532。Sample Input(0532)621-15486Sample Output5486HINT這是個(gè)可以用scanf()解決的問題,請(qǐng)注意都是數(shù)字這個(gè)規(guī)律。#include int main()int a,b,c;scanf(0%d)%d-%d,&a,&b,&c);printf(0086%d%d%d,a,b,c);Problem C:求 1+2+.+n=?Description給定一個(gè) n,求出s = 1+2+3+
19、.+n 的值。Input輸入只有一行,包含一個(gè)正整數(shù)n(n=2 32)。Output輸出一行,為1+2+.+n 的值。Sample Input10Sample Output55HINTn的數(shù)據(jù)圍大,需注意數(shù)據(jù)類型的選擇和計(jì)算次序,以避免數(shù)據(jù)溢出。#include int main()unsigned long long int n,s,i;scanf(%llu,&n);if(n%2=0)s=n/2*(n+1);elses=(n+1)/2*n;printf (%llu,s);Problem D: 2 的多少次曷Description從鍵盤輸入一個(gè)數(shù) x, x是2的整數(shù)次哥(x=2y),請(qǐng)編程求出
20、y的值。Input一個(gè)非負(fù)有理數(shù)x, x在0,2 256圍。Output一個(gè)整數(shù)V。Sample InputSample OutputHINT看起來數(shù)據(jù)很大,但是用 double完全可以存儲(chǔ)。為什么?請(qǐng)研究下 IEEE-754標(biāo)準(zhǔn)的浮點(diǎn) 數(shù)存儲(chǔ)格式。這里要用到C語言標(biāo)準(zhǔn)庫的數(shù)學(xué)函數(shù)。#include #include int main()double x,n;scanf (%lf,&x);n二(log10(x)/(log10(2);printf (%d,(int)n);Problem E:三個(gè)數(shù)比較大小Description從鍵盤上輸入0io。之間的三個(gè)數(shù),按從小到大的順序輸出。Input輸入
21、只有一行,為三個(gè)整數(shù)。Output按從小到大輸出這三個(gè)數(shù)。Sample Input15 10 20Sample Output10 15 20HINT用if語句判斷各種情況可以解決這個(gè)問題。#include int main()int x,y,z,a;scanf (%d %d %d,&x,&y,&z);if(xy)a=x;x=y;y=a; if(xz)a=x;x=z;z=a; if(yz)a=y;y=z;z=a;printf (%d %d %d,x,y,z);Problem A:輸出是m的倍數(shù)或n的倍數(shù)、但不是m和n的公倍數(shù)的數(shù)Description輸出1k之間是m的倍數(shù)或n的倍數(shù)、但不是 m和
22、n的公倍數(shù)的數(shù),其中 1=m,nk100,且 m與 n 不相等。Input輸入三個(gè)整數(shù),依次為 k、m n。Output從小到大輸出符合題意的所有整數(shù),兩數(shù)之間用一個(gè)空格分開。Sample Input15 2 3Sample Output2 3 4 8 9 10 14 15HINT難點(diǎn)在于輸出格式的控制:空格在數(shù)的中間,學(xué)會(huì)用循環(huán)時(shí)邊界情況的特殊處理。#include int main()int k,m,n,i=0,j;scanf (%d %d %d,&k,&m,&n);for (j=1;j=k;j+)if (j%m=0&j%n!=0)|(j%m!=0&j%n=0)i+;if(i=1)prin
23、tf (%d,j);elseprintf ( %d,j);Problem B: n 個(gè)數(shù)的最大值和最小值Description找出n個(gè)數(shù)中最大的數(shù)和最小的數(shù),并將它們的值輸出出來。Input輸入為n+1個(gè)整數(shù),都在int類型圍。這些數(shù)可能用若干空格或者換行符分隔開。n+1輸入的第1個(gè)數(shù)為n,表示后續(xù)有n個(gè)數(shù)輸入。從輸入的第 2個(gè)數(shù)開始,求出直到第 個(gè)數(shù)中最大的數(shù)和最小的數(shù)。Output輸出為兩行,格式見 sample。Sample Input3 0 1-1Sample OutputThe maximum number is 1.The minimum number is -1.HINT分隔符是
24、空格還是回車都是空白符,對(duì) scanf(%d)來說沒有區(qū)別;先讀入 n,然后用for 循環(huán)就很容易控制讀入 n個(gè)數(shù)的過程。#include int main()int i,n,m,max,min;scanf (%d%d,&n,&max);min=max;for(i=1;imax)max=m;if(mmin)min=m;printf(The maximum number is %d.nThe minimum numberis %d.,max,min);Problem C:成績的等級(jí)Description把百分制的考試成績轉(zhuǎn)換成五級(jí)制的成績:90100: Excellent8089: Good70
25、79: Average6069: Pass059: FailingError 。不在0100之間的輸入是非法數(shù)據(jù),輸出“Input輸入多行,每行一個(gè)整數(shù)。Output輸入所對(duì)應(yīng)的成績等級(jí)。Sample Input-i8192356872100Sample OutputError Good Excellent Failing Pass Average ExcellentHINT用switch語句解決這個(gè)問題比較方便。#include #include #include string.hint main()int n;while (scanf (%d,&n)!=EOF)if (n=100)prin
26、tf (Excellentn);else if(n100)printf (Errorn);elseswitch (n/10)case 9:printf (Excellentn);break;case 8:printf (Goodn);break;case 7:printf (Averagen);break;case 6:printf (Passn);break;default :printf (Failingn);return 0;Problem D: A+B ProblemDescription計(jì)算 a+b, 0=a,b1000 。Input輸入有多對(duì)整數(shù) a和b組成,每對(duì)a和b占一行,a,
27、b用空格分開。Output每行輸出一個(gè)a+b的值,順序與輸入對(duì)應(yīng)。Sample Input1 210 20Sample Output330HINTOJ系統(tǒng)上測(cè)試輸入結(jié)束符為 EOF (End Of File ),其值為-1。用scanf()把文件所有容讀 完后,會(huì)讀到EOR所以可以用來判斷輸入是否完成,測(cè)試時(shí)可以用 Ctrl+Z產(chǎn)生EOE本 題解法參看FAQAppend Code#include int main() int a,b;while(scanf(%d %d,&a,&b)!=EOF)printf(%dn,a+b);return 0;Problem E: A+B Problem (II
28、) : Input/OutputPraticeDescription計(jì)算 a+b, 0=a,b1000。Input輸入的第一行是一個(gè)整數(shù) N,后面有N對(duì)整數(shù)a和b,每對(duì)a和b占一行,a,b用空格分 開。Output每行輸出一個(gè)a+b的和,順序與輸入對(duì)應(yīng)。Sample Input21 210 20Sample Output330HINTN給出了測(cè)試樣例數(shù),用for循環(huán)處理方便。#include int main()int N,i,j;scanf(%d,&N);int aN2;for (i=0;iN;i+)for (j=0;j2;j+)scanf (%d”,&aij);for (i=0;iN;i+
29、)printf (%dn,ai+ai1);Problem A: A+B Problem (III) : Input/OutputPraticeDescription計(jì)算 a+b, 0=a,b1000。Input輸入有多對(duì)整數(shù) a和b組成,每對(duì)a和b占一行,a,b用空格分開。當(dāng)測(cè)試樣為0 0時(shí)表示輸入結(jié)束,0 0不參與運(yùn)算。Output每行輸出一個(gè)a+b的值,順序與輸入對(duì)應(yīng)。Sample Input1 210 200 0Sample Output330HINT練習(xí)break的使用。#include int main() int a,b;while(1)scanf(%d %d,&a,&b);if(
30、a=0&b=0)break;elseprintf(%dn,a+b);Problem B: A+B Problem (IV) : Input/OutputPraticeDescription計(jì)算 a+b, 0=a,b1000。Input輸入有多對(duì)整數(shù) a和b組成,每對(duì)a和b占一行,a,b用空格分開。Output每行輸出一個(gè)a+b的值,順序與輸入對(duì)應(yīng)。每個(gè)格式樣例之間用一個(gè)空行分隔開。Sample Input1 210 2015 35Sample Output33050HINT由于輸出的和比空行多一個(gè),所以全部計(jì)算放在一個(gè)循環(huán)里是不行的,必須要特殊處理開 頭或者結(jié)尾。Append Code#inc
31、lude int main()int a,b;while(scanf(%d %d,&a,&b)!=EOF)printf(%dn,a+b);printf(n);Problem C:只有一個(gè)二元運(yùn)算符的表達(dá)式運(yùn)算Description編程序讀入并計(jì)算只有一個(gè)二元運(yùn)算符的表達(dá)式的值。用到的二元運(yùn)算符有:“+”、”、“*”、“/”、,與 C語言的語法一致。Input每行輸入一個(gè)表達(dá)式,格式為:二個(gè)整型的操作數(shù)a和b,中間用一個(gè)符號(hào)分開,這個(gè)符號(hào)就是運(yùn)算符。測(cè)試樣例不存在除數(shù)為0的情況。輸入以a和b為0,且用一個(gè)空格分開結(jié)束。Output每行對(duì)應(yīng)輸入的運(yùn)算符為“ +”、“ -”、“/”、,則at算 a+
32、b、a-b、a*b、 a/b、a%b 的值;否則輸出invalid op ”。Sample Input33+58*92.21-617/39%30 0Sample OutputHINT教材上有非常相似的例題可以參考。#include int main()int a,b;char i;while(1)scanf (%d%c%d,&a,&i,&b);if(a=0&b=0&i=32)break;elseswitch(i)case +:printf(%dn,a+b);break;case -:printf(%dn,a-b);break;case *:printf(%dn,a*b);break;case
33、7:printf(%dn,a/b);break;case %:printf(%dn,a%b);break;default:printf(invalid opn);Problem D:求100以的素?cái)?shù)Description素?cái)?shù)是只能被1和自身整除的正整數(shù),根據(jù)數(shù)學(xué)定義1不是素?cái)?shù)。素?cái)?shù)也叫質(zhì)數(shù)。Input輸入為兩個(gè)整數(shù) m和n,滿足0=m=n=10QOutputSample Input2 12Sample Output117532HINT利用素?cái)?shù)的數(shù)學(xué)規(guī)律可以很容易的解出此題,題目給出的數(shù)據(jù)圍是關(guān)鍵。#include int main()int m,n,i,j,k;scanf(%d %d,&m,&
34、n);printf(=n);for(i=n;i=m;i-) k=0;for(j=1;ji;j+)if(i%j=0)k+;if(k=1)printf(%dn,i);printf();Problem E:十進(jìn)制整數(shù)轉(zhuǎn)二進(jìn)制Time Limit: 1 Sec Memory Limit: 2 MB Submit: 2329 Solved: 1108 Submit北 Status Web BoardDescription給出一個(gè)十進(jìn)制的非負(fù)整數(shù) x, x=216,把它轉(zhuǎn)換成二進(jìn)制數(shù)輸出。Input輸入為多行,每行一個(gè)整數(shù) x,至讀入EOF結(jié)束。Output每行輸出x對(duì)應(yīng)的二進(jìn)制數(shù)值。Sample Inp
35、ut0133365535Sample Output011110000111111HINT本題有多種解法:可以用循環(huán)迭代對(duì)2的除法和取余操作,不過處理的順序與輸出順序相反,需要利用數(shù)組存儲(chǔ);用取對(duì)數(shù)或從大到小減去2的整數(shù)次哥的方法計(jì)算與輸出順序是相同的;也可以用 printf()把十進(jìn)制的數(shù)值處理成十六進(jìn)制,然后1位十六進(jìn)制轉(zhuǎn)4位進(jìn)制;也可以用位運(yùn)算處理。#include int main()int i,j,m,n,k;int a17;while(scanf(%d,&n)!=EOF)if(n=0)printf(0n);elsefor(m=0;m=0;m-)if(am=1)k=m;break;fo
36、r(m=k;m=0;m-) printf(%d,am); printf(n);Problem F:輾轉(zhuǎn)相除法Description輾轉(zhuǎn)相除法,也稱歐幾里得算法,是求最大公約數(shù)的算法。輾轉(zhuǎn)相除法首次出現(xiàn)于歐幾里 得的幾何原本(第 VII卷,命題i和ii )中,而在中國則可以追溯至東漢出現(xiàn)的九 章算術(shù)。兩個(gè)整數(shù)的最大公約數(shù)(亦稱公約數(shù))是能夠同時(shí)整除它們的最大的正整數(shù)。輾轉(zhuǎn)相除法基 于如下原理:兩個(gè)整數(shù)的最大公約數(shù)等于其中較小的數(shù)和兩數(shù)的差的最大公約數(shù)。例如,252 和 105 的最大公約數(shù)是 21 (252 = 21 X 12 ; 105 = 21 X 5 );因?yàn)?252 - 105 = 14
37、7,所以147和105的最大公約數(shù)也是 21。在這個(gè)過程中,較大的數(shù)縮小了,所以繼續(xù) 進(jìn)行同樣的計(jì)算可以不斷縮小這兩個(gè)數(shù)直至其中一個(gè)變成零。這時(shí),所剩下的還沒有變成 零的數(shù)就是兩數(shù)的最大公約數(shù)。例如,計(jì)算a = 1071和b = 462的最大公約數(shù)的過程如下:從1071中不斷減去462直到小于462 (可以減2次,即商q0 = 2 ),余數(shù)是147:1071 = 2 X 462 + 147.然后從462中不斷減去147直到小于147 (可以減3次,即q1 = 3 ),余數(shù)是21: 462 = 3 X 147 + 21.再從147中不斷減去21直到小于21 (可以減7次,即q2 = 7 ),沒有
38、余數(shù):147 = 7 X 21 + 0.此時(shí),余數(shù)是0,所以1071和462的最大公約數(shù)是21。Input輸入為多行,每行有一對(duì)非負(fù)整數(shù) a,b ,且a*b不會(huì)超出int類型的數(shù)據(jù)圍。輸入至 EOF 結(jié)束。Output每行輸出一對(duì)a,b的最大公約數(shù)和最小公倍數(shù),順序與輸入對(duì)應(yīng)。從數(shù)論上的整除定義出發(fā):若 a整除b (b除以a沒有余數(shù)),則 b是a的倍數(shù),a是b的 約數(shù),這里要求 b不為0。因此0是任意整數(shù)的彳數(shù),但是 0不能是約數(shù)。Sample Inputi i2 33 24 25 67 512 618 924 36Sample Output1 11 62 21 62 121 356 129
39、1812 72HINT按照題目描述所給的算法解題,注意以下幾點(diǎn):輾轉(zhuǎn)相除法對(duì)兩個(gè)數(shù)的大小關(guān)系有要求,根據(jù)倍數(shù)和約數(shù)的數(shù)學(xué)定義,一個(gè)非0數(shù)和0的約數(shù)是多少?輾轉(zhuǎn)相除法的計(jì)算過程是符合這種定義的。#include int main() int a,b,c,m,t;while(scanf(%d %d,&a,&b)!=EOF)if(a=0&b!=0)printf(%d %dn,b,a);else if(a!=0&b=0)printf(%d %dn,a,b);elseif(ab)t=a;a=b;b=t;m=a*b;c=a%b;while(c!=0)a=b;b=c;c=a%b;printf(%d %dn,
40、b,m/b);Problem A:簡單的整數(shù)排序Description對(duì)給出的若干整數(shù)按從小到大排序。Input輸入的第一個(gè)數(shù)為 n (n=1000),后接n個(gè)整數(shù)。Output按從小到大的順序輸出這些整數(shù),每兩個(gè)整數(shù)之間用一個(gè)空格分隔開,最后一個(gè)整數(shù)后面 沒有空格。Sample Input10 3 9 1 5 2 8 5 6 7 3Sample Output1 2 3 3 5 5 6 7 8 9HINT排序前必須把所有的整數(shù)都存儲(chǔ)下來。因?yàn)橹挥凶疃鄆o。個(gè)數(shù),i秒的時(shí)間足夠任何排序算法運(yùn)行處結(jié)果來。Append Code#include int main()int i,j,n,t;int a
41、1000;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&ai);for (i=1;in;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;in;i+) if(i=n-1)printf(%d,ai);elseprintf(%d ,ai);Problem B: 兔子的繁殖問題Description假設(shè)一對(duì)兔子每月能生一對(duì)小兔(一雌一雄),每對(duì)小兔出生后的下一個(gè)月是沒有繁殖能 力的,至出生后的第三個(gè)月開始又可以每月生一隊(duì)小兔,問從一對(duì)剛出生的小兔開始,經(jīng) 過若干個(gè)月后一共有多少兔子(假設(shè)在此過程中兔子沒有死亡)?這個(gè)問題是意大利數(shù)學(xué)
42、家菲波那契(Fibonacci )在他1202年出版的算盤全書中提出來的,從第一對(duì)剛出生的小兔開始每月的兔子數(shù)被乘坐菲波那契序列。Input輸入的第一個(gè)數(shù)為 n,接下來有n個(gè)數(shù)字。每個(gè)數(shù)字為一個(gè)月份m (m=4 。Output輸出為n行,每行為第m個(gè)月后的兔子總數(shù)。Sample Input61 2 3 4 5 10Sample Output1235889HINT當(dāng)n較大時(shí),菲波那契序列的第 n項(xiàng)值和計(jì)算量都是很大的,可以先計(jì)算出菲波那契序列 并用數(shù)組存儲(chǔ)下來,然后查詢出每月兔子數(shù),避免重復(fù)運(yùn)算。#include int main()int i,j,k,n;int a50=0,1,2,b50;f
43、or(i=3;i=45;i+)ai=ai-1+ai-2;scanf(%d,&j);for(k=0;kj;k+)scanf(%d”,&bk);for(k=0;k0 , step 不為 0。Output把這個(gè)等差序列輸出在一行里,序列兩數(shù)之間用一個(gè)空格分隔。Sample Inputstart = 1, step = 2, times = 100Sample Output1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 4951 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81
44、 83 85 87 89 91 93 9597 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165167 169 171 173 175 177 179 181 183 185 187 189 191 193 195 197 199HINTAppend Code#include int main()int i,j,k,n;char d100,b100,c100;int a1000;scanf(start = %d, step = %d, times = %d,&i,&j,&k);for(n=0;nk;n+)an=i+j*n;for(n=0;nk;n+)if(n=k-1)printf(%d,an);elseprintf(%d ,an);Problem D:產(chǎn)生等差序列之二Description根據(jù)給出的初始數(shù)、公差和終止條件求等差序列。InputOutput把這個(gè)等差序列輸出在一行里,序列兩數(shù)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年反腐倡廉警示教育工作總結(jié)
- 美術(shù)鑒賞與創(chuàng)新思維
- 2006年貴州高考語文真題及答案
- 體育用品行政后勤工作總結(jié)
- 2023-2024年員工三級(jí)安全培訓(xùn)考試題附答案【完整版】
- 2024企業(yè)主要負(fù)責(zé)人安全培訓(xùn)考試題及答案(名校卷)
- 教師期末教學(xué)工作總結(jié)4篇
- 快樂的國慶節(jié)作文400字5篇
- 市場(chǎng)震動(dòng)月度報(bào)告
- 鄉(xiāng)鎮(zhèn)領(lǐng)導(dǎo)干部學(xué)法用法工作總結(jié)三篇
- 河北省百師聯(lián)盟2023-2024學(xué)年高二上學(xué)期期末大聯(lián)考?xì)v史試題(解析版)
- 2021年四川省涼山州九年級(jí)中考適應(yīng)性考試?yán)砜凭C合(試卷)
- 骨科疼痛的評(píng)估及護(hù)理
- 【MOOC】概率論與數(shù)理統(tǒng)計(jì)-南京郵電大學(xué) 中國大學(xué)慕課MOOC答案
- 2024年度軟件開發(fā)分包合同技術(shù)要求與交底2篇
- 居家養(yǎng)老人員培訓(xùn)管理制度
- 抗菌藥物的合理應(yīng)用培訓(xùn)
- 初三數(shù)學(xué)老師家長會(huì)發(fā)言稿
- 湖北第二師范學(xué)院《操作系統(tǒng)》2023-2024學(xué)年期末試卷
- 2021-2022學(xué)年河北省唐山市高一上學(xué)期期末語文試題
- 舒適化醫(yī)療麻醉
評(píng)論
0/150
提交評(píng)論