C語言經(jīng)典編程題.doc_第1頁
C語言經(jīng)典編程題.doc_第2頁
C語言經(jīng)典編程題.doc_第3頁
C語言經(jīng)典編程題.doc_第4頁
C語言經(jīng)典編程題.doc_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

“藍橋杯”軟件大賽練習(xí)題求素數(shù)最大公約數(shù)和最小公倍數(shù)連續(xù)自然數(shù)分數(shù)比較猜數(shù)字游戲抓交通肇事犯古堡算式約瑟夫問題捕魚問題出售金魚親密數(shù)完全數(shù)加密巧奪偶數(shù)數(shù)字移動1、求101200之間一共有多少個素數(shù)#include #include int su(int m) int i,n=1; for(i=2;i=sqrt(m);i+) if (m%i=0) n=0; break; return n;main() int i,num=0; for(i=101;i=200;i+) if(su(i) num+; printf(101200之間素數(shù)個數(shù)是%d,num);2、求最大公約數(shù)和最小公倍數(shù)#include int zdgxs(int x,int y) int t; if(xy) t=x;x=y;y=t; t=x%y; while(t) x=y; y=t; t=x%y; return y;int zxgbs(int x,int y) return (x*y/zdgxs(x,y);main() int a,b,gxs,gbs; printf(please input two numbers:); scanf(%d%d,&a,&b); gxs=zdgxs(a,b); gbs=zxgbs(a,b); printf(%d和%d的最大公約數(shù)是%dn,a,b, gxs); printf(%d和%d的最小公倍數(shù)是%dn,a,b, gbs);3、請找出十個最小的連續(xù)自然數(shù),它們個個都是合數(shù)(非素數(shù))#include #include int su(long m) int i,n=1; for(i=2;i=10) break; for(i=0;inum;i+) printf(%ldn,ai);4、分數(shù)比較比較兩個分數(shù)的大小。*問題分析與算法設(shè)計人工方式下比較分數(shù)大小最常用的方法是:進行分數(shù)的通分后比較分子的大小??梢跃幊棠M手式方式。#include int zdgxs(int x,int y) int t; if(xc1) printf(%d/%d%d/%dn,a,b,c,d); else if(a1c1) printf(%d/%d%d/%dn,a,b,c,d); else printf(%d/%d=%d/%dn,a,b,c,d);5、猜數(shù)字游戲#include main() int num1,num2; srand(time(NULL); num1=rand()%100; printf(請輸入一個0到100之間的整數(shù):); scanf(%d,&num2); while(1) scanf(%d,&num2); if(num1=num2) printf(你真棒,猜對了!); break; else if(num1num2) printf(猜大了,重猜!);else printf(太小了,重猜!); 6、抓交通肇事犯一輛卡車違反交通規(guī)則,撞人后逃跑?,F(xiàn)場有三人目擊事件,但都沒有記住車號,只記下車號的一些特征。甲說:牌照的前兩位數(shù)字是相同的;乙說:牌照的后兩位數(shù)字是相同的,但與前兩位不同; 丙是數(shù)學(xué)家,他說:四位的車號剛好是一個整數(shù)的平方。請根據(jù)以上線索求出車號。*問題分析與算法設(shè)計按照題目的要求造出一個前兩位數(shù)相同、后兩位數(shù)相同且相互間又不同的整數(shù),然后判斷該整數(shù)是否是另一個整數(shù)的平方。#include #include main() int num,i,j,k; for(i=1;i=9;i+) for(j=0;j=9;j+) if(i!=j) num=i*1000+i*100+j*10+j;for(k=1;k*k=num;k+)if(k*k=num)printf(num=%d,k=%dn,num,k); 7、排隊把N個同學(xué)排成一排, 由前向后按1,2,1,2.報數(shù), 報單數(shù)的走出隊伍, 報雙數(shù)的向前靠攏重新組成一排, 然后再1,2,1,2.報數(shù), 報單數(shù)的走出隊伍, 問剩下最后一個人時, 這個人原來在哪個位置.(N由鍵盤輸入)#include #include struct node int data1; int data2; struct node *next;struct node * create_list(int n) struct node *head,*p,*q; int i; head=(struct node *)malloc(sizeof(struct node); head-data1=1; head-data2=1; p=head; for(i=2;idata1=i; q-data2=i; p-next=q; p=q; p-next=NULL; return(head);struct node * delete_node(struct node *head,struct node *p) struct node *q; if(p=head) head=p-next; p-next=NULL; else q=head;while(q-next!=p)q=q-next;q-next=p-next; free(p); return (head);main() struct node *head,*p,*q; int num,i; printf(請輸入人數(shù):); scanf(%d,&num); head=create_list(num); while(num1) p=head; while(p) if(p-data1)%2) q=p; p=p-next;head=delete_node(head,q); num-;else p=p-next; p=head; i=1; while(p) p-data1=i;i+; p=p-next; printf(最后剩下的人原來的位置是%dn,head-data2);8、古堡算式福爾摩斯到某古堡探險,看到門上寫著一個奇怪的算式:ABCDE*?=EDCBA他對華生說:ABCDE應(yīng)該代表不同的數(shù)字,問號也代表某個數(shù)字!華生:“我猜也是!于是,兩人沉默了好久,還是沒有算出合適的結(jié)果來。請你利用計算機的優(yōu)勢,找到破解的答案。把ABCDE所代表的數(shù)字寫出來。#include int func(long n,int m) int num5,i=0,j; long n1=n; while(n1) numi+=n1%10; n1=n1/10; for(i=0;i4;i+) for(j=i+1;j5;j+) if (numi=numj) return 0; n1=n*m; i=4; while(n1) if(n1%10!=numi-) return 0; n1=n1/10; return 1;main() long i; int j; for(i=10000;i100000;i+) for(j=2;j10;j+) if(func(i,j) printf(%ld*%d=%dn,i,j,i*j); 9、約瑟夫問題15個教徒和15個非教徒在深海上遇險,必須將一半的人投入海中,其余的人才能幸免于難,于是想了一個辦法:30個人圍成一個圓圈,從第一個人開始報數(shù),每數(shù)到第九個人就將他扔入大海,如此循環(huán)進行直到僅余15個人為止。問教徒怎么站,才能使每次投入大海的都是非教徒。#include #include # define M 15# define N 15struct node int data1; /int data2; struct node *next;struct node * create_list(int n) struct node *head,*p,*q; int i; head=(struct node *)malloc(sizeof(struct node); head-data1=1; /head-data2=1; p=head; for(i=2;idata1=i; /q-data2=i; p-next=q; p=q; p-next=head; return(head);struct node * delete_node(struct node *head,struct node *p) struct node *q; if(p=head) head=p-next; p-next=NULL; else q=head;while(q-next!=p)q=q-next;q-next=p-next; free(p); return (head);void print_list(struct node *head) struct node *p; printf(%5d,head-data1); p=head-next; while(p!=head) printf(%5d,p-data1);p=p-next; main() struct node *head,*p,*q; int num=M+N,n; head=create_list(M+N); p=head; while(numN) n=1; while(nnext; n+; q=p; p=p-next; head=delete_node(head,q); num-; print_list(head);10、捕魚問題A、B、C、D、E五個人在某天夜里合伙去捕魚,到第二天凌晨時都疲憊不堪,于是各自找地方睡覺。日上三桿,A第一個醒來,他將魚分為五份,把多余的一條魚扔掉,拿走自己的一份。B第二個醒來,也將魚分為五份,把多余的一條魚扔掉,保持走自己的一份。C、D、E依次醒來,也按同樣的方法拿走魚。問他們合伙至少捕了多少條魚?#include main() int i;long num=1; for(i=1;i=5;i+) num=(num*5)+1; printf(num=%dn,num);11、出售金魚買賣提將養(yǎng)的一缸金魚分五次出售系統(tǒng)上一次賣出全部的一半加二分之一條;第二次賣出余下的三分之一加三分之一條;第三次賣出余下的四分之一加四分之一條;第四次賣出余下的五分之一加五分之一條;最后賣出余下的11條。問原來的魚缸中共有幾條金魚?*問題分析與算法設(shè)計題目中所有的魚是分五次出售的,每次賣出的策略相同;第j次賣剩下的(j+1)分之一再加1/(j+1)條。第五次將第四次余下的11條全賣了。假定第j次魚的總數(shù)為X,則第j次留下:x-(x+1)/(j+1)當?shù)谒拇纬鍪弁戤厱r,應(yīng)該剩下11條。若X滿足上述要求,則X就是題目的解。應(yīng)當注意的是:(x+1)/(j+1)應(yīng)滿足整除條件。試探X的初值可以從23開始,試探的步長為2,因為X的值一定為奇數(shù)。*程序說明與注釋#includeint main()int i,j,n=0,x; /*n為標志變量*/for(i=23;n=0;i+=2) /*控制試探的步長和過程*/for(j=1,x=i;j=11;j+) /*完成出售四次的操作*/if(x+1)%(j+1)=0) /*若滿足整除條件則進行實際的出售操作*/x-=(x+1)/(j+1);else x=0;break; /*否則停止計算過程*/if(j=5&x=11) /*若第四次余下11條則滿足題意*/printf(There are %d fishes at first.n,i); /*輸出結(jié)果*/n=1; /*控制退出試探過程*/12、親密數(shù)如果整數(shù)A的全部因子(包括1,不包括A本身)之和等于B;且整數(shù)B的全部因子(包括1,不包括B本身)之和等于A,則將整數(shù)A和B稱為親密數(shù)。求3000以內(nèi)的全部親密數(shù)。*問題分析與算法設(shè)計按照親密數(shù)定義,要判斷數(shù)a是否有親密數(shù),只要計算出a的全部因子的累加和為b,再計算b的全部因子的累加和為n,若n等于a則可判定a和b是親密數(shù)。計算數(shù)a的各因子的算法:用a依次對i(i=1a/2)進行模運算,若模運算結(jié)果等于0,則i為a的一個因子;否則i就不是a的因子。*程序說明與注釋#includeint main()int a,i,b,n;printf(There are following friendlynumbers pair smaller than 3000:n);for(a=1;a3000;a+) /*窮舉1000以內(nèi)的全部整數(shù)*/ for(b=0,i=1;i=a/2;i+) /*計算數(shù)a的各因子,各因子之和存放于b*/if(!(a%i)b+=i; /*計算b的各因子,各因子之和存于n*/for(n=0,i=1;i=b/2;i+)if(!(b%i)n+=i;if(n=a&ab)printf(%4d.%4d ,a,b); /*若n=a,則a和b是一對親密數(shù),輸出*/13.完全數(shù)如果一個數(shù)恰好等于它的因子之和,則稱該數(shù)為“完全數(shù)”。*問題分析與算法設(shè)計根據(jù)完全數(shù)的定義,先計算所選取的整數(shù)a(a的取值11000)的因子,將各因子累加于m,若m等于a,則可確認a為完全數(shù)。*程序說明與注釋#includeint main()int a,i,m;printf(There are following perfect numbers smaller than 1000:n);for(a=1;a1000;a+) /*循環(huán)控制選取11000中的各數(shù)進行判斷*/for(m=0,i=1;i=a/2;i+) /*計算a的因子,并將各因子之和m=a,則a是完全數(shù)輸出*/if(!(a%i)m+=i;if(m=a)printf(%4d ,a);printf(n);14、加密題目:某個公司采用公用電話傳遞數(shù)據(jù),數(shù)據(jù)是四位的整數(shù),在傳遞過程中是加密的,加密規(guī)則如下:每位數(shù)字都加上5,然后除以10,用余數(shù)代替該數(shù)字,再將第一位和第四位交換,第二位和第三位交換。編程實現(xiàn)輸入一個電話號碼,得到加密后的數(shù)字。1.程序分析:2.程序源代碼:#include main()int a,i,aa4,t;scanf(%d,&a);aa0=a%10;aa1=a%100/10;aa2=a%1000/100;aa3=a/1000;for(i=0;i=3;i+)aai+=5;aai%=10;for(i=0;i=0;i-)printf(%d,aai);15、巧奪偶數(shù)桌子上有25顆棋子,游戲雙方輪流取子,每人每次最少取走一顆棋子,最多可取走3顆棋子。雙方照這樣取下去,直到取光所有的棋子。于是雙方手中必然一方為偶數(shù),一方為奇數(shù),偶數(shù)方為勝者。請編程實現(xiàn)人機游戲。#include stdio.hmain()int a, s, w, i;a = 25;s = 0;w = 0;while( a != 0)i= rand()%3 + 1;printf(這次機器取的粒數(shù)是:%dn,i); if( a i)s = s + i; a = a - i; else s = s + a; a = 0; while(1) printf(請輸入你這次要取的粒數(shù):);scanf(%d,&i);if(i=1) break;else printf(輸入不正確,請重新輸入13之間的數(shù):n); if( a i)w = w + i; a = a - i;elsew = w + a;a = 0;printf(你一共取的粒數(shù)是:%d,機器一共取的粒數(shù)是:%d,w,s

溫馨提示

  • 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

提交評論