第三次c語言題_第1頁
第三次c語言題_第2頁
第三次c語言題_第3頁
第三次c語言題_第4頁
第三次c語言題_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、問題 A: 十進(jìn)制整數(shù)轉(zhuǎn)二進(jìn)制時(shí)間限制: 1 Sec內(nèi)存限制: 2 MB提交: 932解決: 399提交狀態(tài)討論版題目描述給出一個(gè)十進(jìn)制的非負(fù)整數(shù)x,x=216,把它轉(zhuǎn)換成二進(jìn)制數(shù)輸出。輸入輸入為多行,每行一個(gè)整數(shù)x,至讀入EOF結(jié)束。輸出每行輸出x對應(yīng)的二進(jìn)制數(shù)值。樣例輸入0133365535樣例輸出0111100001提示本題有多種解法:可以用循環(huán)迭代對2的除法和取余操作,不過處理的順序與輸出順序相反,需要利用數(shù)組存儲(chǔ);用取對數(shù)或從大到小減去2的整數(shù)次冪的方法計(jì)算與輸出順序是相同的;也可以用printf()把十進(jìn)制的數(shù)值處理成十六進(jìn)制,然后1位十六進(jìn)制轉(zhuǎn)4位二進(jìn)制;也可以用位運(yùn)算處理。#i

2、ncludeint main()long int a65536,b,c,i,j;while (scanf(%ld,&b)!=EOF)if(b=0)printf(0n);elsec=0;for(i=b;(i/2!=0)|(i=1);i=i/2)ac=i%2;c=c+1;for(j=c-1;j0;j-)printf(%ld,aj);printf(%ldn,a0);問題 B: 求一元二次方程的根時(shí)間限制: 1 Sec內(nèi)存限制: 2 MB提交: 1050解決: 106提交狀態(tài)討論版題目描述一元二次方程的標(biāo)準(zhǔn)形式為ax2+bx+c=0(a0),其中a、b、c為常數(shù)。求解一元二次方程的根x時(shí)有三種情況,分

3、別為(記=b2-4ac):1. 0,有兩個(gè)不等的實(shí)根;2. =0,有兩個(gè)相同的實(shí)根;3. 0。第三行輸出為所輸入方程的根,分為三種情況:1. 若方程滿足0,即有兩不等實(shí)根x1、x2,則按大小順序輸出這兩個(gè)實(shí)根。2. 若方程滿足=0,即有兩相同實(shí)根x,則輸出一個(gè)實(shí)根。3. 若方程滿足0,即有兩共軛的虛根x1、x2,則輸出兩個(gè)虛根,虛部符號為正的(即u+vi形式)先輸出,虛部符號為負(fù)的(x-yi形式)后輸出。以上輸出均不輸出數(shù)學(xué)上無意義或可省略的的符號,所有數(shù)值最多保留6位有效數(shù)字。每個(gè)樣例之后都有一個(gè)空行分隔。樣例輸入1 2 1-1 2 -1-5 2 -0.2-3 2 03 0 122 4 40

4、樣例輸出Case 1 :x2 + 2x + 1 = 0only one real root : -1Case 2 :x2 - 2x + 1 = 0only one real root : 1Case 3 :5x2 - 2x + 0.2 = 0only one real root : 0.2Case 4 :3x2 - 2x = 0two real roots : 0, 0.666667Case 5 :3x2 + 12 = 0two imaginary roots : 2i, -2iCase 6 :2x2 + 4x + 4 = 0two imaginary roots : -1+i, -1-i提示

5、輸出方程格式的各種情況要想清楚,這一部分測試數(shù)據(jù)給的很全面。另一個(gè)就是浮點(diǎn)數(shù)的精度控制,這一部分sample給出了例子。值得注意的是,linux下gcc編譯的浮點(diǎn)數(shù)運(yùn)算結(jié)果有-0,這是OJ系統(tǒng)Judge端使用的系統(tǒng);而windows XP下的minGW編譯器和VC6不會(huì)產(chǎn)生-0,只會(huì)輸出0;但windows 7下的minGW編譯器是能夠產(chǎn)生-0的(確實(shí)很詭異)。因此使用windows XP的同學(xué)忽略了對結(jié)果為0的檢測,程序需要對結(jié)果為0的情況進(jìn)行全面考慮,確保正確的輸出0。這個(gè)問題卡了好些同學(xué)好幾天。關(guān)于是否會(huì)產(chǎn)生-0,輸出表達(dá)式0.0/-1的結(jié)果就能測試出來。浮點(diǎn)數(shù)從負(fù)數(shù)方向運(yùn)算出結(jié)果為0,

6、則浮點(diǎn)值為-0是符合C語言浮點(diǎn)數(shù)運(yùn)算規(guī)則的,目前尚不清楚windows XP系統(tǒng)不能產(chǎn)生-0的原因。Append Code#include#include #includeint main()long double a,b,c,o;long int e=1;while(scanf(%llf,&a)!=0)scanf(%llf%llf,&b,&c);printf(Case %ld:n,e);if(a0) if(b=1) printf(+ x );else printf(+ %lgx ,b);else if(b0)printf(+ %lg ,c);else if(c0)printf(two rea

7、l roots : %lg,%lgn,(-b-sqrt(o)/2/a,(-b+sqrt(o)/2/a);elseif(b!=0)if(fabs(sqrt(-o)/2/a-1)=1e-6) printf(two imaginary roots : %lg+i,%lg-in,-b/2/a,-b/2/a);elseprintf(two imaginary roots : %lg+%lgi,%lg-%lgin,-b/2/a,sqrt(-o)/2/a,-b/2/a,sqrt(-o)/2/a);elseprintf(two imaginary roots : %lgi,-%lgin,sqrt(-o)/2/

8、a,sqrt(-o)/2/a);printf(n);scanf(%llf,&a);e+;問題 C: 輾轉(zhuǎn)相除法時(shí)間限制: 1 Sec內(nèi)存限制: 2 MB提交: 1240解決: 398提交狀態(tài)討論版題目描述輾轉(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 12;105 = 21

9、5);因?yàn)?52 105 = 147,所以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 462 + 147.然后從462中不斷減去147直到小于147(可以減3次,即q1 = 3),余數(shù)是21: 462 = 3 147 + 21.再從147中不斷減去21直到小于21(可以減7次,即q2 =

10、7),沒有余數(shù): 147 = 7 21 + 0.此時(shí),余數(shù)是0,所以1071和462的最大公約數(shù)是21。輸入輸入為多行,每行有一對非負(fù)整數(shù)a,b,且a*b不會(huì)超出int類型的數(shù)據(jù)范圍。輸入至EOF結(jié)束。輸出每行輸出一對a,b的最大公約數(shù)和最小公倍數(shù),順序與輸入對應(yīng)。樣例輸入1 12 32 23 24 67 512 618 924 36樣例輸出1 11 62 21 62 121 356 129 1812 72提示按照題目描述所給的算法解題,注意以下幾點(diǎn):輾轉(zhuǎn)相除法對兩個(gè)數(shù)的大小關(guān)系有要求,根據(jù)倍數(shù)和約數(shù)的數(shù)學(xué)定義,一個(gè)非0數(shù)和0的約數(shù)是多少?輾轉(zhuǎn)相除法的計(jì)算過程是符合這種定義的。Append C

11、ode#includeint main() int a,b,c,k; for(;scanf(%d %d,&b,&a)!=EOF;) if(b=0) printf(%d 0n,a);continue; if(a=0) printf(%d 0n,b);continue; c=a*b; if(ba) a=a+b; b=a-b; a=a-b; k=b%a; for(;k!=0;) b=a; a=k; k=b%a; printf(%d %dn,a,c/a);問題 D: Sum Problem時(shí)間限制: 1 Sec內(nèi)存限制: 2 MB提交: 787解決: 394提交狀態(tài)討論版題目描述計(jì)算若干整數(shù)的和,這些

12、整數(shù)都是小于1000的非負(fù)整數(shù)。輸入輸入為多行,每行為一組測試樣例。每個(gè)測試樣例以一個(gè)整數(shù)N開始,后面接著是N個(gè)整數(shù)。輸出每組測試樣例對應(yīng)一行輸出,輸出所給的N個(gè)整數(shù)之和,順序與輸入對應(yīng)。樣例輸入3 1 2 35 10 15 20 30 50樣例輸出6125提示用雙重循環(huán)解決這個(gè)問題,外層循環(huán)控制用例的輸入,內(nèi)層循環(huán)控制讀取N個(gè)整數(shù)。Append Code#includevoid main()int a,b,c,i;while(scanf(%d,&a)!=EOF)c=0; for(i=1;i=a;i+) scanf(%d,&b);c+=b;printf(%dn,c);問題 E: Sum Pro

13、blem (II) : Input/Output Pratice時(shí)間限制: 1 Sec內(nèi)存限制: 2 MB提交: 539解決: 386提交狀態(tài)討論版題目描述計(jì)算若干整數(shù)的和,這些整數(shù)都是小于1000的非負(fù)整數(shù)。輸入輸入的第一行是一個(gè)整數(shù)M,后面有M個(gè)測試樣例。每個(gè)測試樣例以一個(gè)整數(shù)N開始,后面接著是N個(gè)整數(shù)。輸出每組測試樣例對應(yīng)一行輸出,為所給的N個(gè)整數(shù)之和,順序與輸入對應(yīng)。樣例輸入23 1 2 35 10 15 20 30 50樣例輸出6125提示用雙重循環(huán)解決這個(gè)問題,外層循環(huán)控制用例的輸入,內(nèi)層循環(huán)控制讀取N個(gè)整數(shù)。Append Code提交狀態(tài)討論版#includevoid main(

14、)int a,b,c,i,d,e;scanf(%dn,&a); for(i=1;i=a;i+)scanf(%dn,&d);c=0;for(e=1;e=d;e+)scanf(%d,&b);c+=b;printf(%dn,c);問題 F: Sum Problem (III) : Input/Output Pratice時(shí)間限制: 1 Sec內(nèi)存限制: 2 MB提交: 543解決: 382提交狀態(tài)討論版題目描述計(jì)算若干整數(shù)的和,這些整數(shù)都是小于1000的非負(fù)整數(shù)。輸入輸入為多行,每行為一組測試樣例。每個(gè)測試樣例以一個(gè)整數(shù)N開始,后面接著是N個(gè)整數(shù)。當(dāng)輸入的N為0時(shí)表示輸入結(jié)束。輸出每組測試樣例對應(yīng)一

15、行輸出,為所給的N個(gè)整數(shù)之和,順序與輸入對應(yīng)。樣例輸入3 1 2 35 10 15 20 30 500樣例輸出6125提示用雙重循環(huán)解決這個(gè)問題,外層循環(huán)控制用例的輸入,內(nèi)層循環(huán)控制讀取N個(gè)整數(shù)。Append Code提交狀態(tài)討論版#includevoid main()int a,b,c,i;while(scanf(%d,&a)!=EOF)if(a=0)break;elsec=0;for(i=1;i=a;i+)scanf(%d,&b);c+=b;printf(%dn,c);問題 G: Sum Problem (IV) : Input/Output Pratice時(shí)間限制: 1 Sec內(nèi)存限制:

16、 2 MB提交: 605解決: 384提交狀態(tài)討論版題目描述計(jì)算若干整數(shù)的和,這些整數(shù)都是小于1000的非負(fù)整數(shù)。輸入輸入的第一行是一個(gè)整數(shù)M,后面有M個(gè)測試用例。每個(gè)測試用例以一個(gè)整數(shù)N開始,后面接著是N個(gè)整數(shù)。輸出每組測試用例對應(yīng)一行輸出,為所給的N個(gè)整數(shù)之和,順序與輸入對應(yīng)。兩樣例的輸出之間用一個(gè)空行分隔開。樣例輸入23 1 2 35 10 15 20 30 50樣例輸出6125提示用雙重循環(huán)解決這個(gè)問題,外層循環(huán)控制用例的輸入,內(nèi)層循環(huán)控制讀取N個(gè)整數(shù)。Append Code#includevoid main()int a,b,c,i,d,e;scanf(%dn,&a); for(i=

17、1;i=a;i+)scanf(%dn,&d);c=0;for(e=1;e=d;e+)scanf(%d,&b);c+=b;printf(%dn,c);if(i!=a)printf(n);問題 H: 百錢買百雞問題時(shí)間限制: 1 Sec內(nèi)存限制: 2 MB提交: 1120解決: 161提交狀態(tài)討論版題目描述“百錢買百雞”是我國著名的古代數(shù)學(xué)問題,中國古代數(shù)學(xué)家張丘建在他的算經(jīng)中提出了這樣一個(gè)問題:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一,百錢買百雞,問翁、母、雛各幾何?你的任務(wù)是求解下面這個(gè)問題。問題是這樣描述的:a文錢可買一只公雞,b文錢可買一只母雞,c文錢可買d只小雞。用m文錢買n只雞,

18、那么有公雞x只、母雞y只、小雞z只。求解出符合題意的x,y,z。輸入輸入為一張表。第一行是一個(gè)固定不變的表頭,格式見sample。后面有多行,每行為一組測試數(shù)據(jù)。每組測試數(shù)據(jù)由6個(gè)整數(shù)組成,分別為“a,b,c/d,m,n”。滿足0a,b,c,d=50,50=m,n=108+1,并且母雞和小雞的單價(jià)不會(huì)相同。輸出每組測試數(shù)據(jù)的運(yùn)行結(jié)果輸出為一張表,表頭固定為“COCKS,HENS,CHICKS”。每組測試數(shù)據(jù)的一個(gè)可行解數(shù)出為一行,為三個(gè)整數(shù):“x,y,z”。多組解按照公雞數(shù)從少到多的順序輸出。若測試數(shù)據(jù)無解則輸出“Cannot buy!”。兩組測試數(shù)據(jù)之間用一個(gè)空行分隔開。樣例輸入COCK,H

19、EN,CHICK,MONEY,CHICKS3,2,1/3,100,1005,3,1/3,100,1008,5,1/7,100,1008,5,1/7,300,300樣例輸出COCKS,HENS,CHICKS0,40,605,32,6310,24,6615,16,6920,8,7225,0,75COCKS,HENS,CHICKS0,25,754,18,788,11,8112,4,84Cannot buy!COCKS,HENS,CHICKS8,40,252提示本題重點(diǎn)在于了解多重循環(huán)的運(yùn)行效率問題,減少一層循環(huán)可以降低很大規(guī)模的運(yùn)算量。通過在循環(huán)體內(nèi)加計(jì)數(shù)器可以統(tǒng)計(jì)出循環(huán)的運(yùn)行次數(shù),當(dāng)測試數(shù)據(jù)變大時(shí)

20、,運(yùn)行次數(shù)的增長會(huì)非常可觀,這就是超時(shí)的原因了。Append Code#includeint main()long int i,j,k,a,b,c,d,m,n,h,g;char o;char x27;gets(x);while(scanf(%ld,%ld,%ld%c%ld,%ld,%ld,&a,&b,&c,&o,&d,&m,&n)!=EOF)h=0;g=1;i=0;for(j=0;j(m-a*i)/b;j+)k=m-i-j;if(a*i+b*j+k*c/d=m&k*c%d=0)g=2;h=h+1;if(h=1)printf(COCKS,HENS,CHICKSn);printf(%ld,%ld,

21、%ldn,i,j,k);if(j=(m-a*i)/b-1)i=i+1;j=-1;if(i=m/a)break;if(g=1)printf(Cannot buy!n);printf(n);問題 I: 神棍的純真愿望時(shí)間限制: 1 Sec內(nèi)存限制: 2 MB提交: 1135解決: 328提交狀態(tài)討論版題目描述問題背景:神棍隊(duì)的神棍童鞋很喜歡和女盆友逛街。神棍節(jié)這天,他們照例去逛街,親昵過程中忽然發(fā)現(xiàn)路邊上圍了好一圈人。好奇心大盛的神棍于是湊過去圍觀。原來那里有一個(gè)棍神,他出了一道題目,如果有人能夠答對的話,他就會(huì)實(shí)現(xiàn)那個(gè)人的一個(gè)愿望。神棍心想,有個(gè)女盆友多么幸福,要是大家都有女盆友該有多好。于是神

22、棍想要答出這個(gè)問題,然后許一個(gè)讓大家都可以很快擁有自己的女盆友的愿望,順便在女盆友的面前臭美一番。神棍掃了一眼題目,拿出貼身小電腦,巴拉巴拉幾下就敲出了代碼,解決了那個(gè)問題。大家都在為神棍歡呼。這是什么問題呢?你是否也有興趣看看?如果AC了的話就可以跟魔法少女簽訂契約,成為魔法少女的奴隸喔!問題描述:某個(gè)數(shù)的立方如果以111結(jié)尾的話,我們就稱其為“神棍數(shù)”,現(xiàn)在要你求第k大的“神棍數(shù)”是多少。輸入輸出一個(gè)整數(shù)表示第k大的“神棍數(shù)”樣例輸入1樣例輸出471提示Append Code提交狀態(tài)討論版#includeint main()long long int ggg;while(scanf(%lld,&ggg)!=EOF)if(ggg=1)printf(471n);else printf(%lld471n,ggg-1);問題 J: 魔方陣時(shí)間限制: 1 Sec內(nèi)存限制: 16 MB提交: 803解決: 225提交狀態(tài)討論版題目描述所謂N階魔方陣,是一個(gè)N*N的方陣,其元素由1到N2組成,且方陣每行每列以及對角線

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(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

提交評論