




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、吉林大學(xué)歷年C語言程序設(shè)計試題及答案(4)98年試題答案(輔導(dǎo)班講義) 二。(1)解題思想:用p,q,k分別紀(jì)錄A,B,C,三個數(shù)組正在訪問的位置。如果,AP <=Bq,那么將AP賦給ck.否則,將Bq賦給Ck.如果A先訪問完,把B的剩余部分復(fù)制到C中。同樣,如果B先訪問完,把A的剩余部分復(fù)制到C中。 設(shè)計函數(shù)如下: Void fun (int a,int b,int c) int i,p=0,q=0,k=0; while(p <=m-1)&&(q <=n-1) if(ap <=bq) ck=ap; p+; els
2、e ck=bq; q+; k+; if(p=m) for(i=q;i <=n-1;i+) ck=b; k+; if(q=n) for(i=p;i <=n-1;i+) ck=a; k+; (2)解題思想:從數(shù)組的第一個元素a0開始訪問,用一個變量p來紀(jì)錄當(dāng)前平臺的整數(shù)值,用length紀(jì)錄最長平臺的長度,用counter動態(tài)紀(jì)錄每一個平臺的長度。如果某一個平臺訪問完以后counter >length則修改length. 設(shè)計函數(shù)如下: int fun(int a,int n) int length=1,counter=1; int p=a0; for(
3、int k=1;k<n;K+) if(ak=p) counter+; else p=ak; if(length <counter) length=counter; counter=1; if(length <counter) length=counter; return length; (3)解題思想:從數(shù)組的第一個元素a0開始訪問,每訪問到一個零,則從后面找到一個非零元素與其交
4、換。若找不到,那么程序結(jié)束。 設(shè)計函數(shù)如下: void fun(int a,int n) int i,j,p; for(i=0;i <n;i+) if(a=0) for(j=i;j <n;j+) if(aj!=0) p=j;break; if(j=n-1) return; a=ap; ap=0; 三
5、,解法一, 解題思想:用一個數(shù)組a200來存放集合的元素,并且設(shè)a0=1.每次都從集合中選取最小的元素輸出。如果輸出的數(shù)量達(dá)到100個,則結(jié)束程序。否則產(chǎn)生兩個數(shù)y,z,并把y,z插入到集合中去(這里插入應(yīng)該按照從小到大的順序排序,以保證每次都選取最小的元素。)在插入的過程中還應(yīng)該保證集合中沒有相同的元素(集合的互異性)。 設(shè)計程序如下: #include <iostream.h > int a200; void insert(int k) int i ; for(i=0;i <200;i+)
6、0; if(a=k) return; for(i=199;i >=0;i-) if(a=0) continue; if(k <a) ai+1=a; else ai+1=k; return; void main() int count=0,n,i,y,z; a0=1; for(i=0;i <200;i+)
7、60; n=aj; cout < <n < <" " count+; if(count%10=0) cout < <endl; if(count=100) return; y=2*n+1; z=3*n+1; insert(y);
8、 insert(z); 解法2,解題思想:按照自然數(shù)的順序連續(xù)地產(chǎn)生數(shù)k,判斷它是否屬于集合M.如果是輸出這個數(shù),計數(shù)器count加一。如果不是則連續(xù)。其中判斷使用一個遞歸函數(shù)實現(xiàn)。 設(shè)計程序如下: #include <iostream.h > int judge(int k) int t; if(k=1) return 1; if(k-1)%2=0&&judge(k-1)/2) return 1; if(k-1)%3=0&&judge(k-1)/3) return 1; r
9、eturn 0; void main() int k=1,count=0; while(count <100) if(judge(k) cout < <k < <" " count+ if(count%10=0) cout < <endl; k+; 99年試題答案 一,(2)解題思想:平面上任意三點只要不共線,則一定能構(gòu)造出一個三角形。所以只要k1=(y2-y
10、1)/(x2-x1)和k2=(y3-y2)/(x3-x2)不相等或互為相反數(shù)就可以構(gòu)成三角形。 設(shè)計函數(shù)如下: #define MAX 3.4e37 typedef struct int x; int y; PointType100; int Triangle(PointType Points) int i,j,k,count=0; float K1,K2; for(i=0;i <100;i+) for(j=i+1;j <100;j+) for(k=j+1;k <100;k+)
11、; if(Pointsj.x=Points.x) else K1=(Pointsj.y-Points.y)*1.0/(Pointsj.x-Points.x); if(Pointsj.x=Pointsk.x) K2=MAX; else K2=(Pointsj.y-Pointsk.y)*1.0/(Pointsj.x-Pointsk.x);
12、if(K1=K2) continue; return count; 二。解題思想:對于點N1,設(shè)它鄰接到a,b,c.,那么只要求出a,b,c.,到N2的所有路徑。遞歸地調(diào)用這個過程,就可以求出解。 設(shè)計程序如下: #include <iostream.h > struct node int x; struct node *next; ; node *head; void print() node *p=head;
13、60; while(p!=NULL) cout < <p- >x < <" " p=p- >next; cout < <endl; void del() node *p=head; head=head- >next; delete p; void insert(int i ) node *p=new node; p- >x=i; p- >next=head; head=
14、p; void paths(int a1010,int N1,int N2) if(N1=N2) print(); return; for(int i=0;i <10;i+) if(aN1=1) insert(i); paths(a,i,N2); del(); 三,解題思想:設(shè)表l1和l2分別有m,n個元素。那么這個保序合并的過程就是把n個元素往m+1個位置插入的過程,其中插入的順序必須保持原有的順序。由組合數(shù)學(xué)的知識可以知道,這種插入一共有(m+n)!/m!*n!種排序方法?,F(xiàn)在我們用一個數(shù)組c
15、m+1來記錄這m+1個位置的元素的個數(shù),那么只要記錄先來cm+1的具體數(shù)值就可以唯一確定l1 和l2的保序合并表,打印的時候只需要根據(jù)cm+1打印即可。 設(shè)計程序如下: #include <iostream.h > const int m=3; const int n=3; char l1m='1','2','3' char l2n='a','b','c' void merges(int c,int p; int k) int i,j; if(k=n
16、+1) print(c);return; /遞歸出口,如果所有的數(shù)都放完了,打印,返回 for(j=0;j <m+1;j+) dj=cj; cp=cp+1;/p 位置放下一個數(shù) k+; for(i=p;i <m+1;i+) merge(c,i,k); for(j=0;j <m+1;j+) cj=dj; k-; void main() int cm+1; int k=1; for(int i=0;i <m+1;i+) c=0; merge(c,0,k); void print
17、(int c) int sum=0,p=0; for(int i=0;i <m+1;i+) sum+=c; if(sum!=n) return; for(i=0;i <m+1;i+) for(int j=0;j <m+1;j+) cout < <l2p; p+; cout < <l1; cout < <endl; 四, 解題思想:按照數(shù)目的元素作為交換規(guī)則,可以得到:aj和am-1n-1互相交換。如果有偶數(shù)行,那么前m/2和后m/2行交換;如果有奇數(shù)行,
18、那么第m/2的前n/2個數(shù)和后n/2個數(shù)相交換。 設(shè)計程序如下: include <iostream.h > void swapt(int amn) int temp ,i,j; for(i=0;i <(m/2);i+) for(j=0;j <n;j+) temp=aj; aj=am-1-
19、in-1-j; am-1-in-1-j=temp; if(m%2!=0) for(j=0;j <(n/2);j+) temp=am/2j; am/2j=am/2n-1-j; am/2n-1-j=temp; 紀(jì)錄每一個平臺的長度。如果某一個平臺訪問完以后counter >length則修改length. 設(shè)計函數(shù)如下: int fun(int a,int n)
20、 int length=1,counter=1; int p=a0; for(int k=1;k<n;K+) if(ak=p) counter+; else p=ak; if(length <counter) length=counter; counter=1; if(length <counter) length=counter; return length; (3
21、)解題思想:從數(shù)組的第一個元素a0開始訪問,每訪問到一個零,則從后面找到一個非零元素與其交換。若找不到,那么程序結(jié)束。 設(shè)計函數(shù)如下: void fun(int a,int n) int i,j,p; for(i=0;i <n;i+) if(a=0) for(j=i;j <n;j+) if(aj!=0) p=j;break; if(j=n-1) return;
22、 a=ap; ap=0; 三,解法一, 解題思想:用一個數(shù)組a200來存放集合的元素,并且設(shè)a0=1.每次都從集合中選取最小的元素輸出。如果輸出的數(shù)量達(dá)到100個,則結(jié)束程序。否則產(chǎn)生兩個數(shù)y,z,并把y,z插入到集合中去(這里插入應(yīng)該按照從小到大的順序排序,以保證每次都選取最小的元素。)在插入的過程中還應(yīng)該保證集合中沒有相同的元素(集合的互異性)。 設(shè)計程序如下: #include <iostream.h > int a200; void insert(int k) int i ; for(i
23、=0;i <200;i+) if(a=k) return; for(i=199;i >=0;i-) if(a=0) continue; if(k <a) ai+1=a; else ai+1=k; return; void main() int count=0,n,i,y,z; a0=1;
24、 for(i=0;i <200;i+) n=aj; cout < <n < <" " count+; if(count%10=0) cout < <endl; if(count=100) return; y=2*n+1; &
25、#160; z=3*n+1; insert(y); insert(z); 解法2,解題思想:按照自然數(shù)的順序連續(xù)地產(chǎn)生數(shù)k,判斷它是否屬于集合M.如果是輸出這個數(shù),計數(shù)器count加一。如果不是則連續(xù)。其中判斷使用一個遞歸函數(shù)實現(xiàn)。 設(shè)計程序如下: #include <iostream.h > int judge(int k) int t; if(k=1) return 1; if(k-1)%2=0&&judge(k-1)/2) return 1; i
26、f(k-1)%3=0&&judge(k-1)/3) return 1; return 0; void main() int k=1,count=0; while(count <100) if(judge(k) cout < <k < <" " count+ if(count%10=0) cout < <endl; k+; 99年試題答案 一,(
27、2)解題思想:平面上任意三點只要不共線,則一定能構(gòu)造出一個三角形。所以只要k1=(y2-y1)/(x2-x1)和k2=(y3-y2)/(x3-x2)不相等或互為相反數(shù)就可以構(gòu)成三角形。 設(shè)計函數(shù)如下: #define MAX 3.4e37 typedef struct int x; int y; PointType100; int Triangle(PointType Points) int i,j,k,count=0; float K1,K2; for(i=0;i <100;i+) for(j=i+1;j <100;
28、j+) for(k=j+1;k <100;k+) if(Pointsj.x=Points.x) else K1=(Pointsj.y-Points.y)*1.0/(Pointsj.x-Points.x); if(Pointsj.x=Pointsk.x) K2=MAX; else K2=(Pointsj.y-Pointsk.y)*1.0/(Po
29、intsj.x-Pointsk.x); if(K1=K2) continue; return count; 二。解題思想:對于點N1,設(shè)它鄰接到a,b,c.,那么只要求出a,b,c.,到N2的所有路徑。遞歸地調(diào)用這個過程,就可以求出解。 設(shè)計程序如下: #include <iostream.h > struct node int x; struct node *next; ; node *head; void
30、 print() node *p=head; while(p!=NULL) cout < <p- >x < <" " p=p- >next; cout < <endl; void del() node *p=head; head=head- >next; delete p; void insert(int i ) node *p=
31、new node; p- >x=i; p- >next=head; head=p; void paths(int a1010,int N1,int N2) if(N1=N2) print(); return; for(int i=0;i <10;i+) if(aN1=1) insert(i); paths(a,i,N2); del(); 三,解題思想:設(shè)表l1和l2分別有m,n個元素。那么這個保序合并的過程就是把n個元素往m+1個位置插入的過程,其中插入的順序必須保持原有的順序。由組合
32、數(shù)學(xué)的知識可以知道,這種插入一共有(m+n)!/m!*n!種排序方法?,F(xiàn)在我們用一個數(shù)組cm+1來記錄這m+1個位置的元素的個數(shù),那么只要記錄先來cm+1的具體數(shù)值就可以唯一確定l1 和l2的保序合并表,打印的時候只需要根據(jù)cm+1打印即可。 設(shè)計程序如下: #include <iostream.h > const int m=3; const int n=3; char l1m='1','2','3' char l2n='a','b','c' void merges(int c,int p; int k) int i,j; if(k=n+1) print(c);return; /遞歸出口,如果所有的數(shù)都放完了,
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 砂石運輸合同
- 關(guān)于教師見習(xí)期工作小結(jié)心得(14篇)
- 《丁丁當(dāng)當(dāng)》讀后感
- 發(fā)傳單心得體會(13篇)
- 人生價值演講稿范文(31篇)
- 員工宿舍安全管理制度(3篇)
- 家具市場調(diào)查報告(18篇)
- 2024私人房屋出租合同范本
- 元旦主題班會2024(28篇)
- 2025小學(xué)四年級蘇教版數(shù)學(xué)下學(xué)期期中學(xué)業(yè)質(zhì)量監(jiān)測復(fù)習(xí)題
- 《黃色新聞的泛濫》課件
- 2024年山東省公務(wù)員考試《行測》真題及答案解析
- 化工原理Ⅱ?qū)W習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024-2025學(xué)年初中體育與健康九年級全一冊人教版(2024)教學(xué)設(shè)計合集
- 環(huán)保產(chǎn)業(yè)政策及市場發(fā)展趨勢分析研究
- 2024年河南省高考對口升學(xué)語文英語試題
- 學(xué)習(xí)白求恩精神,做一個高尚的人一個純潔的人
- 《中醫(yī)藥學(xué)概論》期末考試復(fù)習(xí)題庫(含答案)
- 2024年秋季新外研版三年級上冊英語課件 Unit 1 第1課時(Get ready)
- 單位委托員工辦理水表業(yè)務(wù)委托書
- 2024版《保密法》培訓(xùn)課件
評論
0/150
提交評論