C++小型競賽題目_第1頁
C++小型競賽題目_第2頁
C++小型競賽題目_第3頁
C++小型競賽題目_第4頁
C++小型競賽題目_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一、統(tǒng)計數(shù)字問題(1)題目描述一本書的頁碼從自然數(shù)1 開始順序編碼直到自然數(shù)n。書的頁碼按照通常的習慣編排,每個頁碼都不含多余的前導數(shù)字0。例如,第6 頁用數(shù)字6 表示,而不是06 或006 等。數(shù)字計數(shù)問題要求對給定書的總頁碼n,計算出書的全部頁碼中分別用到多少次數(shù)字0,1,2,9?,F(xiàn)在給定書的總頁碼十進制整數(shù)n (1n109) 。編程計算書的全部頁碼中分別用到多少次數(shù)字0,1,2,9。(2)輸入要求輸入只有1 行,給出表示書的總頁碼的整數(shù)n。(3)輸出要求輸出共有10行,在第k行輸出頁碼中用到的數(shù)字k-1及其出現(xiàn)的次數(shù)。(4)樣例輸入11(5)樣例輸出0 11 42 13 14 15 16

2、 17 18 19 1#include<iostream>using namespace std;int main()int a10 = 0,0,0,0,0,0,0,0,0,0 ;int i, j, k;int n;cout << "輸入頁數(shù)" << endl;cin >> n;for (i = 1; i <= n; i+)for (j = i; j / 10 != 0 | j % 10 != 0; j = j / 10)for (k = 0; k <= 9; k+)if (j % 10 = k)ak = ak +

3、 1;for (i = 0; i <= 9; i+)cout << i<<" "<<ai << 'n'return 0;沒有問題。二、敘拉古猜想(1)題目描述有這樣一個游戲:從一個正整數(shù)開始,兩人輪流進行如下運算:若是奇數(shù),就把這個數(shù)乘以3再加1;若是偶數(shù),就把這個數(shù)除以2。這樣演算下去,直到第一次得到1才算結(jié)束,首先得到1的獲勝。比如,要是從1開始,就可以得到1421;要是從17開始,則可以得到175226134020105168421。這個問題就是敘拉古猜想,也叫科拉茲猜想或角谷猜想。現(xiàn)在,你和你的朋

4、友一起玩這個游戲,由你先開始,請問誰獲勝?(2)輸入要求要求可有多組數(shù)據(jù)。第一行N(N<=500),接下來有N行,每行一個整數(shù)M(M<=10,000,000),表示你拿到的數(shù)字是M。(3)輸出要求輸出N行,如果是你獲勝,輸出“I win!”,否則輸出“I lost!”。(4)樣例輸入2117(5)樣例輸出I win!I lost!#include<iostream>using namespace std;int hanshu(int a)int n=0;for(;a!=1;n+)if(a%2=1)a=3*a+1;if(a%2=0)a=a/2;return n;int x

5、iegula(int a)int n;n=hanshu(a);if(n%2=0)return 1;elsereturn 0;int main()int a500,i,n;cout<<"輸入數(shù)據(jù)組數(shù)"<<endl;cin>>n;cout<<"輸入正整數(shù)(從我開始)"<<endl;for(i=0;i<n;i+)cin>>ai;for(i=0;i<n;i+)if(xiegula(ai)=1)cout<<"I win!"<<endl;i

6、f(xiegula(ai)=0)cout<<"I lost!"<<endl;return 0;沒有問題。三、全排列(1)題目描述給定n個整數(shù),現(xiàn)請編程求它們所有的全排列。例如整數(shù)集1,2,3,較小的數(shù)字較先,這樣按字典序生成的全排列是:1 2 31 3 22 1 32 3 13 1 23 2 1(2)輸入要求輸入包括兩行,第一行給出正整數(shù)n(0<n<=8),第二行是n個整數(shù)(大小范圍:-10000, 10000)。(3)輸出要求按字典序輸出這n個整數(shù)的全排列,每一行給出一個排列。(4)樣例輸入31 23 88(5)樣例輸出1 23 881

7、 88 2323 1 8823 88 188 1 2388 23 1#include<iostream>using namespace std;int n;void swap(int *a,int *b)int t;t=*a;*a=*b;*b=t;void shuchu(int a)int i;for(i=0;i<n;i+)cout<<ai<<" "cout<<endl;void digui(int a,int n)int i;if(n=1)shuchu(a);elsefor(i=0;i<n;i+)swap(ai,

8、an-1);digui(a,n-1);swap(ai,an-1);int main()int i,a8;cout<<"輸入正整數(shù)個數(shù)(o<n<=8)"<<endl;cin>>n;cout<<"輸入整數(shù)"<<endl;for(i=0;i<n;i+)cin>>ai;cout<<endl;digui(a,n);return 0; 然而一開始我忘記了從小到大。#include<iostream>#include<math.h>using

9、namespace std;void paixu(int* a,int n) int temp; int i; int j;for(i=0;i<n-1;i+) for(j=0;j<n-i-1;j+) if(aj>=aj+1) temp=aj+1; aj+1=aj; aj=temp;int kebukeyishuchu(int shu,int n)int a8,i,j,sum=0;bool kebukeyi=true;for(i=0;i<n;i+)an-i-1=shu%10;shu=shu/10;sum=sum+an-i-1;for(i=0;i<n;i+)if(ai

10、=0)kebukeyi=false;if(sum!=n*(n+1)/2)kebukeyi=false;for(i=0;i<n&&kebukeyi=true;i+)for(j=i+1;j<n;j+)if(ai=aj)kebukeyi=false;if(kebukeyi=true)return 0;elsereturn 1;void shuchu(int shu,int a,int n)int i,b8;for(i=0;i<n;i+)bn-i-1=shu%10;shu=shu/10;for(i=0;i<n;i+)cout<<abi-1<&l

11、t;" "cout<<endl;int main()int i,a8,b8,min=0,max=0,n;cout<<"輸入正整數(shù)個數(shù)(o<n<=8)"<<endl;cin>>n;cout<<"輸入整數(shù)"<<endl;for(i=0;i<n;i+)cin>>ai;paixu(a,n);cout<<endl;for(i=0;i<n;i+)bi=i+1;min=min+bi*pow(10,n-i-1);max=max+bi

12、*pow(10,i);for(i=min;i<=max;i+)if(kebukeyishuchu(i,n)=1)continue;if(kebukeyishuchu(i,n)=0)shuchu(i,a,n);return 0; 四、C階乘問題(1)題目描述也許你早就知道階乘的含義,N階乘是由1到N相乘而產(chǎn)生,如:12! = 1×2×3×4×5×6×7×8×9×10×11×12 = 479,001,60012的階乘最右邊的非零位為6。寫一個程序,計算N(1<=N<=50

13、,000,000)階乘的最右邊的非零位的值。注意:10,000,000!有2499999個零。(2)輸入要求僅一行,包含一個正整數(shù)N。(3)輸出要求單獨一行,包含一個整數(shù)表示最右邊的非零位的值。(4)樣例輸入12(5)樣例輸出6#include<iostream>using namespace std;int main()int i,t,n;cout<<"輸入需要計算的階乘數(shù)"<<endl;cin>>n;t=1;for(i=1;i<=n;i+)t=t*i;for(;t%10=0;t=t/10);t=t%10;cout&l

14、t;<"整數(shù)最右邊非零位的值"<<t<<endl;return 0; 這個題會在15,35這幾種5尾數(shù)的結(jié)果后面出現(xiàn)bug,然后我已經(jīng)想不到了。五、Yushi難題(1)題目描述有一位著名的數(shù)學家叫Yushi,他提出了一個世紀難題:給定一個正整數(shù)N,由1,2,N組成的集合 S0=1,2,3,N對于任意給定的集合,定義集合的和為集合中所有元素的和。集合S0可以被劃分為兩個不相交的子集合S1,S2。分別對這兩個集合求和,如果兩個集合的和相差恰好為K,則記為一種合法的劃分方法。考慮N=7,K=0,則合法劃分方法一種有4種:1,2,4,7,3,5,6;1

15、,2,5,6,3,4,7;1,6,7,2,3,4,5;1,3,4,6,2,5,7對于給定的N和K,求出集合的劃分方法總數(shù)。(2)輸入要求僅含一行,兩個整數(shù)N(1<N<32)和K(0<=K<=100000000)。(3)輸出要求僅含一個數(shù),表示劃分集合的合法方案數(shù)。(4)樣例輸入7 0(5)樣例輸出4六、搬寢室(1)題目描述在大學的寢室里面,大家可根據(jù)自己的學號選擇床號。如果某同學的學號是a,并且有0.k-1一共k張床,那么他就會選擇a%k號床作為他的床位。顯然,兩個人不能睡在一張床上。那么給出所有同學的學號,請你為他們準備一間臥室,使得里面的床的數(shù)量最少。(2)輸入要求

16、第一行是人數(shù)n(1<=n<=5,000);第2到第n+1行是每個同學的學號Si(1<=Si<=1,000,000)。(3)輸出要求僅一行,是最少的床的數(shù)目。(4)樣例輸入54691013(5)樣例輸出8#include<iostream>using namespace std;int main()int a100,b100;int n,i,j,k;cin>>n;bool chuangzuishao=true;for(i=0;i<n;i+)cin>>ai;for(k=2;k+)chuangzuishao=true;for(i=0;

17、i<n;i+)bi=(ai)%k;for(i=0;i<n;i+)for(j=i+1;j<n;j+)if(bi=bj)chuangzuishao=false;if(chuangzuishao=true)break;cout<<k<<endl;return 0;這個應(yīng)該也是沒有問題的。七、確定進制(1)題目描述6+9 = 12 對于十進制來說是錯誤的,但是對于13進制來說是正確的。即, 6(13) + 9(13) = 12(13), 而 12(13) = 1×131 + 2×130 = 15(10)。你的任務(wù)是寫一段程序讀入三個整數(shù)p、

18、q和 r,然后確定一個進制 B(2<=B<=16) 使得 p + q = r。如果B有很多選擇, 則輸出最大的一個。如果沒有合適的進制,則輸出 0。(2)輸入要求要求輸入可有 T組測試樣例。T在第一行給出。每一組測試樣例占一行,包含三個整數(shù)p、q、r。 p、q、r的所有位都是數(shù)字,并且1 <= p、q、r <= 1,000,000。(3)輸出要求對于每組測試樣例輸出一行,且包含一個整數(shù):即使得p + q = r成立的最大的B。如果沒有合適的B,則輸出 0。(4)樣例輸入311 11 169 8 116 9 12(5)樣例輸出01613#include<iostre

19、am>#include<math.h>using namespace std;int shuzhi(int a,int b)int i,t=0;for(i=0;a/10!=0|a%10!=0;a=a/10,i+)t=t+a%10*pow(b,i);return t;int ceshi(int p,int q,int r)int B,t=0,a,b,c;for(B=2;B<=16;B+)a=shuzhi(p,B);b=shuzhi(q,B);c=shuzhi(r,B);if(a+b=c)t=B;return t;int main()int a5003;int i,j,n,

20、jieguo;cout<<"測試樣的組數(shù)"<<endl;cin>>n;for(i=0;i<n;i+)for(j=0;j<3;j+)cin>>aij;for(i=0;i<n;i+)jieguo=ceshi(ai0,ai1,ai2);cout<<jieguo<<endl;return 0; 這個題應(yīng)該也是沒有問題的。八、相似基因(1)題目描述眾所周知,人類基因可以看作一個堿基對序列,它包含了4種核苷酸,簡記為A,C,G,T。讓我們觀察這樣一段基因序列 “ACCAGGTT”,這段序列共由8個

21、核苷酸構(gòu)成,其中第1位和第4位是堿基A,第2位和第3位是堿基C,第5位和第6位是堿基G,第7位和第8位是堿基T。Tom構(gòu)造了這樣一個0,1矩陣:1, 0, 0, 1, 0, 0, 0, 00, 1, 1, 0, 0, 0, 0, 00, 1, 1, 0, 0, 0, 0, 01, 0, 0, 1, 0, 0, 0, 00, 0, 0, 0, 1, 1, 0, 00, 0, 0, 0, 1, 1, 0, 00, 0, 0, 0, 0, 0, 1, 10, 0, 0, 0, 0, 0, 1, 1如果第i位的堿基與第j位的堿基一樣,那么0,1矩陣的i行j列為1,否則為0。如果基因序列X與基因序列Y等

22、長且具有相同的0,1矩陣,Tom就會認為X與Y是相似的基因序列。現(xiàn)在的問題是:給你兩段長度為N的基因序列,請你幫助Tom判斷它們是否相似。(1)輸入要求可以有多組測試數(shù)據(jù),每組數(shù)據(jù)第1行輸入一個正整數(shù)N(1N1000000),第2行和第3行分別輸入兩段長度為N的基因序列(只由A,C,G,T四種字符構(gòu)成)。輸入直至N=0為結(jié)尾。(2)輸出要求每組數(shù)據(jù)輸出僅一行,如果相似則輸出 “YES”,否則輸出 “NO”,注意雙引號不需要輸出。(3)樣例輸入2AATG6ACCGTTGAATCC0(3)樣例輸出NOYES#include<iostream>using namespace std;in

23、t main()int N,i,j,k;char a2100;int b100100;int c100100;cin>>N;for(;N!=0;)bool xiangshi=true;for(i=0;i<2;i+)for(j=0;j<N;j+)cin>>aij;for(i=0;i<2;i+)for(j=0;j<N;j+)for(k=0;k<N;k+)if(a0j=a0k)bjk=1;if(a1j=a1k)cjk=1;for(j=0;j<N;j+)for(k=0;k<N;k+)if(bjk)!=cjk)xiangshi=false

24、;break;if(xiangshi=true)cout<<"YES"<<endl;elsecout<<"NO"<<endl;cin>>N;return 0;這個題是沒有問題的。九、團伙(1)題目描述在某城市里住著N個人,任何兩個認識的人不是朋友就是敵人,而且滿足:1、我朋友的朋友是我的朋友;2、我敵人的敵人是我的朋友;所有是朋友的人組成一個團伙。告訴你關(guān)于這N個人的M條信息,即某兩個人是朋友,或者某兩個人是敵人,請你編寫一個程序,計算出這個城市最多可能有多少個團伙?(2)輸入要求第一行包含一個

25、整數(shù)N,第二行包含一個整數(shù)M,1<N<=1000,1<=M<=5000;接下來M行描述M條信息,內(nèi)容為以下兩者之一:“F X Y”表示X與Y是朋友;“E X Y”表示X與Y是敵人。其中1<=X,Y<=N。(3)輸出要求包含一個整數(shù),即可能的最大團伙數(shù)。(4)樣例輸入64E 1 4F 3 5F 4 6E 1 2(5)樣例輸出3然而這道題我已經(jīng)醉了。#include<iostream>using namespace std;int main()int i,N,j,M,k,b100,tuanhuoshu=0,h;int min,max;char a10

26、0;int c1002;cin>>N>>M;for(i=0;i<N;i+)bi=1;for(i=0;i<M;i+)cin>>ai;for(j=0;j<2;j+)cin>>cij;for(i=0;i<M;i+)if(ai='F')min=ci0<ci1?ci0:ci1;max=ci0>ci1?ci0:ci1;bmin-1=bmin-1+bmax-1;bmax-1=0;for(i=0;i<N;i+)cout<<bi<<" "cout<<e

27、ndl;for(i=0;i<M;i+)for(j=i+1;j<M;j+)if(ai='E'&&aj='E')for(k=0;k<2;k+)for(h=0;h<2;h+)if(cik=cjh)if(ci1-k>cj1-h)bcj1-h-1+=bci1-k-1;bci1-k-1=0;if(ci1-k<cj1-h)bci1-k-1+=bcj1-h-1;bcj1-h-1=0;for(i=0;i<N;i+)cout<<bi<<" "cout<<endl;for

28、(i=0;i<N;i+)if(bi!=0)tuanhuoshu+;cout<<tuanhuoshu<<endl;return 0;這個應(yīng)該是可以的。十、選課(1)題目描述學校實行學分制。每門的必修課都有固定的學分,同時還必須獲得相應(yīng)的選修課程學分。學校開設(shè)了N門的選修課程,學生有M天的時間學習。學生花一定量的天數(shù)選修一門課并考核通過就能獲得相應(yīng)的學分。在選修課程中,有一門課程可以直接選修,其它課程則需要一定的基礎(chǔ)知識,必須在選了其它的一些課程的基礎(chǔ)上才能選修。例如數(shù)據(jù)結(jié)構(gòu)必須在選修了C+程序設(shè)計之后才能選修。我們稱C+程序設(shè)計是數(shù)據(jù)結(jié)構(gòu)的先修課。每門課的直接先修課最多只有一門。兩門課也可能存在相同的先修課

溫馨提示

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

評論

0/150

提交評論