C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)編程題_第1頁(yè)
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)編程題_第2頁(yè)
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)編程題_第3頁(yè)
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)編程題_第4頁(yè)
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)編程題_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、void con vert(i nt *result, int n) if(n=10)con vert(result+1, n/10);*result = n %10;int main (i nt argc, char* argv) int n = 123456789, result20=;conv ert(result, n);prin tf(%d:, n);for(i nt i=0; i= average)prin tf(%d:%dn, nu mber, score);retur n average; else printf(Average=%dn, total/n);return tot

2、al/n;int main (i nt argc, char* argv) fin d(0, 0);3、遞歸實(shí)現(xiàn)回文判斷(如:abcdedbca就是回文,判斷一個(gè)面試者對(duì)遞歸理解的 簡(jiǎn)單程序)int find(char *str, int n) if(n=n; i-) resultj = *source+;resultj+1 = 0;fin d(source, result, n-1);int main (i nt argc, char* argv) int const n = 3;char *source = ABCDE, result n+1 = 0;if(n0 & strle n( so

3、urce)0 & nn) while(m%n != 0) n+;m /= n;prim(m, n);prin tf(%d*, n);int main (i nt argc, char* argv) int n = 435234;prin tf(%d=, n);prim(n, 2);6尋找迷宮的一條出路,o:通路;X :障礙。(大家經(jīng)常談到的一個(gè)小算法 題)#defi ne MAX_SIZE 8int H4 = 0, 1, 0, -1;in t V4 = -1,0, 1, 0;char MazeMAX_SIZEMAX_SIZE = X,X,X,X,X,X,X,X,o,o,o,o,o, X,X,X

4、,X,o,X,X,o, X,X,o,X,o,X,X,X,X, X,X,X,o,X,X,o,o,o,X,X,o,o,o,o,X,o,o,X,X,X,X,X,X,X,X;void Fin dPath(i nt X, i nt Y) if(X = MAX_SIZE | Y = MAX_SIZE) for(i nt i = 0; i MAX_SIZE; i+)for(i nt j = 0; j MAX_SIZE; j+)prin tf(%c%c, Mazeij, j MAX_SIZE-1 ? : n);else for(int k = 0; k = 0 & Y = 0 & Y MAX_SIZE & X

5、 MAX_SIZE & o= MazeXY) MazeXY=;Fin dPath(X+Vk, Y+Hk);MazeXY =o;int main (i nt argc, char* argv) Fin dPath(1,0);7、隨機(jī)分配座位,共50個(gè)學(xué)生,使學(xué)號(hào)相鄰的同學(xué)座位不能相鄰(早些時(shí)候用 C#寫(xiě)的,沒(méi)有用C改寫(xiě))。static void Main( stri ng args)int Tmp = 0, Count = 50;in t Seats = new in tCo un t;bool Stude nts = new boolCo un t;System.Ra ndom Ran dSt

6、ude nt=new System.Ra ndom();Stude ntsSeats0=Ra ndStude nt.Next(O,Cou nt)=true;for(int i = 1; i Count; ) Tmp=(i nt)Ra ndStude nt.Next(O,Cou nt);if(!StudentsTmp)&(Seatsi-1-Tmp!=1) & (Seatsi-1 - Tmp) !=-1) Seatsi+ = Tmp;Stude ntsTmp = true;foreach(i nt Stude nt in Seats)System.Co nsole.Write(Stude nt +

7、 );8、求網(wǎng)格中的黑點(diǎn)分布。現(xiàn)有6*7的網(wǎng)格,在某些格子中有黑點(diǎn),已知各行與 各列中有黑點(diǎn)的點(diǎn)數(shù)之和,請(qǐng)?jiān)谶@張網(wǎng)格中畫(huà)出黑點(diǎn)的位置。(這是一網(wǎng)友提出的題目,說(shuō)是他筆試時(shí)遇到算法題)#defi ne ROWS 6#defi ne COLS 7int iPointsRROWS = 2, 0, 4, 3, 4, 0;/ 各行黑點(diǎn)數(shù)和的情況int iPointsCCOLS = 4, 1,2, 2, 1,2, 1;/ 各列黑點(diǎn)數(shù)和的情況int iCo un t, iF ound;int iSumRROWS, iSumCCOLS, GridROWSCOLS;int Set(int iRowNo) if(

8、iRowNo = ROWS) for(i nt iColNo=0; iColNo COLS & iSumCiColNo=iPoi ntsCiColNo; iColNo+)if(iColNo = COLS-1) prin tf(nNo.%d:n, +iCou nt);for(i nt i=0; i ROWS; i+)for(i nt j=0; j COLS; j+)prin tf(%d%c, Gridij, (j+1) % COLS ? : n);iFou nd = 1;/ iFou nd = 1,有解 else for(int iColNo=0; iColNo COLS; iColNo+) i

9、f(iPoi ntsRiRowNo = 0) Set(iRowNo + 1); else if(GridiRowNoiColNo=0) GridiRowNoiColNo = 1;iSumRiRowNo+; iSumCiColNo+;if(iSumRiRowNoiPointsRiRowNo & iSumCiColNov=iPointsCiColNo)Set(iRowNo);else if(iSumRiRowNo=iPoi ntsRiRowNo & iRowNo = 0 & Value = 0) Found = 1;int Sum = 0;for(int i=0; iN & Flagi != 0;

10、 i+) Sum += StampFlagi;prin tf(%d , StampFlagi);printf(tSum=%dnn, Sum);else for(int i=1; i0; i+)if(Value-Stampi = 0) Flagk+ = i;Combine(n-1, Value-Stampi);Flag-k = 0;retur n Found;int main (i nt argc, char* argv) for(i nt i=1; Comb in e(N, i); i+, Fou nd=0);10、 大整數(shù)數(shù)相乘的問(wèn)題。(這是2002年在一考研班上遇到的算法題) void M

11、ultiple(char A, char B, char C) int TMP, I n=0, Le nA=-1, Le nB=-1;while(A+LenA != 0);while(B+LenB != 0);int In dex, Start = LenA + LenB - 1;for(int i=LenB-1; i=0; i-) In dex = Start-;for(int ln=O, j=LenA-1; j=0; j-) TMP = (Cl ndex-O) + (Aj-O) * (Bi - 0) + In;Cl ndex- = TMP % 10 + O;In = TMP / 10;Cl

12、 ndex = In + 0;int main (i nt argc, char* argv) char A = 21839244444444448880088888889;char B = 38888888888899999999999999988;char Csizeof(A) + sizeof(B) - 1;for(i nt k=0; k= 0 & strSourceIndex 0 & strSourceIndex = strSourceIndex-1+1) iLen+;/連續(xù)數(shù)字的長(zhǎng)度增1 else /出現(xiàn)字符或不連續(xù)數(shù)字if(iLen iMax) iMax = iLe n;iHead

13、 = iTmp;/該字符是數(shù)字,但數(shù)字不連續(xù)if(strSourceIndex = 0 & strSourceIndex = 9) iTmp = In dex;iLe n = 1;for(iTmp=0 ; iTmp iMax; iTmp+) /將原字符串中最長(zhǎng)的連續(xù)數(shù)字串 賦值給結(jié)果strResultiTmp = strSourceiHead+; strResultiTmp=O;return iMax;/返回連續(xù)數(shù)字的最大長(zhǎng)度int main (i nt argc, char* argv) char strSource=ads3sl456789DF3456ld345AA, charstrRes

14、ultsizeof(strSource);prin tf(Le n=%d, strResult=%s n strSource=%sn,GetSubStri ng(strSource, strResult), strResult, strSource);12、四個(gè)工人,四個(gè)任務(wù),每個(gè)人做不同的任務(wù)需要的時(shí)間不同,求任務(wù)分配的 最優(yōu)方案。(2005年5月29日全國(guó)計(jì)算機(jī)軟件資格水平考試 一一軟件設(shè)計(jì)師的算法題)。#include stdafx.h#defi ne N 4int CostNN = 2, 12, 5, 32,/ 行號(hào):任務(wù)序號(hào),列號(hào):工人序號(hào)8, 15, 7, 11,/每行元素值表示這

15、個(gè)任務(wù)由不同工人完成所需要的時(shí)間24, 18, 9, 6,21, 1,8, 28;in t Min Cost=1000;int TaskN, TempTaskN, WorkerN;void Assig n(i nt k, int cost) if(k = N) Min Cost = cost;for(i nt i=0; iN; i+)TempTaski = Taski; else for(i nt i=0; iN; i+) if(Workeri=0 & cost+Costki MinCost) /為提高效率而進(jìn)行剪枝Workeri = 1; Taskk = i;Assig n( k+1, co

16、st+Costki);Workeri = 0; Taskk = 0;Assig n(0, 0);prin tf(最佳方案總費(fèi)用=%dn, Min Cost);for(int i=0; i=k & j=k;k+)if(Boardi-kj-k) return 0;for(k=1; i=k;k+)if(Boardi-kj)return 0;for(k=1; i=k & j+kN;k+)if(Boardi-kj+k) return 0;return 1;void Trial(int i, int n) /尋找合適下棋位置if(i = n) for(i nt k=0; k n; k+) for(i nt

17、 m=0; mn; m+)prin tf(%d , Boardkm);prin tf(n);prin tf(n); else for(int j=0; jn; j+) Boardij = 1;if(Valid(i,j)Trial(i+1, n);Boardij = 0;int main (i nt argc, char* argv) Trial(0, N);14、實(shí)現(xiàn)strstr功能,即在父串中尋找子串首次出現(xiàn)的位置。(筆試中常讓面試者實(shí)現(xiàn)標(biāo)準(zhǔn)庫(kù)中的一些函數(shù))char * strstri ng(char *Pare ntStri ng, char *SubStri ng) char *pSub

18、Stri ng, *pPareStri ng;for(char *pTmp=Pare ntStri ng; *pTmp; pTmp+) pSubStri ng = SubStri ng; pPareStri ng = pTmp;while(*pSubString = *pPareString & *pSubString != 0) pSubStri ng+;pPareStri ng+; if(*pSubStri ng = 0)retur n pTmp;return NULL;int main (i nt argc, char* argv) char *Pare ntStri ng = happ

19、y birthday to you!;char *SubStri ng = birthday;prin tf(%s,strstri ng(Pare ntStri ng, SubStri ng);15、現(xiàn)在小明一家過(guò)一座橋,過(guò)橋的時(shí)候是黑夜,所以必須有燈。現(xiàn)在小明過(guò)橋 要1分,小明的弟弟要3分,小明的爸爸要6分,小明的媽媽要8分,小明的爺爺要12分 每次此橋最多可過(guò)兩人,而過(guò)橋的速度依過(guò)橋最慢者而定,而且燈在點(diǎn)燃后30分就會(huì)熄滅。問(wèn)小明一家如何過(guò)橋時(shí)間最短?(原本是個(gè)小小智力題,據(jù)說(shuō)是外企的面試題,在這里用程序 來(lái)求解)#include stdafx.h#defi ne N 5#defi ne

20、SIZE 64/將人員編號(hào):小明-0,弟弟-1,爸爸-2,媽媽-3,爺爺-4/每個(gè)人的當(dāng)前位置:0-在橋左邊,1-在橋右邊int Positio nN;/過(guò)橋臨時(shí)方案的數(shù)組下標(biāo);臨時(shí)方案;最小時(shí)間方案;int In dex, TmpSchemeSIZE, SchemeSIZE;/最小過(guò)橋時(shí)間總和,初始值100;每個(gè)人過(guò)橋所需要的時(shí)間int MinTime=100, TimeN=1,3, 6, 8, 12;/尋找最佳過(guò)橋方案。Remn a nt未過(guò)橋人數(shù);CurTime:當(dāng)前已用時(shí)間;/ Direction:過(guò)橋方向,1-向右,0-向左void Fin d(i nt Remnan t, int

21、CurTime, i nt Directio n) 更新最少 時(shí)間及方案Min Time=CurTime;for(int i=0; i=0; i+) Schemei = TmpSchemei; else if(Direction = 1) / 過(guò)橋方向向右,從橋左側(cè)選出兩人過(guò)橋for(i nt i=0; iN; i+)if(Positioni = 0 & CurTime + Timei MinTime) TmpSchemeI ndex+ = i;Positio ni = 1;for(i nt j=0; j Timej ? Timei : Timej); if(Positionj = 0 & C

22、urTime + TmpMax MinTime) TmpSchemel ndex+ = j;Positio nj = 1;Fin d(Rem nant - 2, CurTime + TmpMax, !Directio n); Positio nj = 0;TmpScheme-I ndex = -1;Positio ni = 0; TmpScheme-I ndex = -1; else /過(guò)橋方向向左,從橋右側(cè)選出一個(gè)人回來(lái)送燈for(i nt j=0; jN; j+) if(Positionj = 1 & CurTime+Timej MinTime) TmpSchemeI ndex+ = j;

23、Positio nj = 0;Fin d(Re mnan t+1, CurTime+Timej, !Directi on);Positio nj = 1; TmpScheme-I ndex = -1;int main (i nt argc, char* argv) for(int i=0; i=0; j-) /*的思想,將*前面*/strj+1=strj;非*字符逐個(gè)后移,直到遇到*字符*/strj+1 = *;coun t+; retur n count;int main (i nt argc, char* argv) char str = ab*cd*e*12;printf(str1=%s

24、n, str);prin tf(str2=%s, coun t=%d, str, cha nge(str);/終于得到一個(gè)比較高效的算法,一個(gè)網(wǎng)友提供,估計(jì)應(yīng)該和金山面試官的想法 一致。算法如下:int cha nge(char *str) int i,j=strle n( str)-1; for(i=j; j=0; j-) if(stri!=*) i-; else if(strj!=*) stri = strj;printf(MinTime=%d:, MinTime);/ 輸出最佳方案for(int i=0; i=0; i+=3)printf( %d-%d %d, Schemei, Sche

25、mei+1, Schemei+2); prin tf(bb );/定義鏈表中的數(shù)據(jù)類型/定義單鏈表結(jié)構(gòu)/創(chuàng)建單鏈表,n為節(jié)點(diǎn)個(gè)數(shù)i-; return i+1;17、2005年11月15日華為軟件研發(fā)筆試題。實(shí)現(xiàn)一單鏈表的逆轉(zhuǎn)#i nclude stdafx.htypedef char eleType;typedef struct list nodeeleType data;struct list node *n ext;no de; node *create(i nt n) node *p = (node *)malloc(sizeof( no de);node *head = p; head

26、-data = A; for(int i=B; in ext = (node *)malloc(sizeof( no de);p-data = i; p-n ext = NULL;return head;void print(node *head) /按鏈表順序輸出鏈表中元素for(; head; head = head-n ext)prin tf(%c , head-data);prin tf(n);node *reverse(node *head, node *pre) /逆轉(zhuǎn)單鏈表函數(shù)。這是筆試時(shí)需要寫(xiě)的最主要函數(shù)node *p=head-n ext; head-n ext = pre;

27、if(p) return reverse(p, head); elseretur n head;int main (i nt argc, char* argv) node *head = create(6); prin t(head);head = reverse(head, NULL); prin t(head);18、編碼實(shí)現(xiàn)字符串轉(zhuǎn)整型的函數(shù)(實(shí)現(xiàn)函數(shù) atoi的功能),據(jù)說(shuō)是神州數(shù)碼筆 試題。如將字符串 ” +123” 123-0123” 123, “ 123CS45 123,.45CS” 123,“ CS123.45” 0#i nclude stdafx.hstrj = *;int

28、str2int(const char *str) / 字符串轉(zhuǎn)整型函數(shù)int i=0, sig n=1, value = 0;if(str=NULL) return NULL;/ 空串直接返回NULLif(str0=- | str0=+) / 判斷是否存在符號(hào)位i = 1;sig n = (str0=- ? -1 : 1);for(; stri=0 & striv=9; i+)/ 如果是數(shù)字,則繼續(xù)轉(zhuǎn)換value = value * 10 + (stri - 0);retur n sig n * value;int main (i nt argc, char *argv) char *str

29、= -123.45CS67;int val = str2i nt(str);printf(str=%stval=%dn, str, val);19、歌德巴赫猜想。任何一個(gè)偶數(shù)都可以分解為兩個(gè)素?cái)?shù)之和。(其實(shí)這是個(gè)C二級(jí)考試的模擬試題)#include stdafx.h#in clude math.hint main (i nt argc, char* argv) int Even=78, Prime1, Prime2, Tmp1, Tmp2;for(Prime1=3; Prime1=Eve n/2; Prime1+=2) for(Tmp1=2,Tmp2=sqrt(float(Prime1);

30、Tmp1=Tmp2 &Prime1%Tmp1 != 0; Tmp1+);if(Tmp1=Tmp2) continue;Prime2 = Eve n-Prime1;for(Tmp1=2,Tmp2=sqrt(float(Prime2); Tmp1=Tmp2 &Prime2%Tmp1 != 0; Tmp1+);if(Tmp1=Tmp2) continue;printf(%d=%d+%dn, Even, Prime1, Prime2);20、快速排序(東軟喜歡考類似的算法填空題,又如堆排序的算法等)#i nclude stdafx.h#defi ne N 10int part(int list, in

31、t low, int high) / 一趟排序,返回分割點(diǎn)位置int tmp = listlow;while(lowvhigh) while(low=tmp) -high; listlow = listhigh;while(lowhigh & listlow=tmp) +low; listhigh = listlow;listlow = tmp; return low;void QSort(int list, int low, int high) / 應(yīng)用遞歸進(jìn)行快速排序if(lowhigh) int mid = part(list, low, high);QSort(list, low, m

32、id-1);QSort(list, mid+1, high);void show(int list, int n) / 輸出列表中元素for(i nt i=0; in; i+)prin tf(%d , listi);prin tf(n);int main (i nt argc, char* argv) in t listN = 23, 65, 26, 1,6, 89, 3, 12, 33, 8;show(list, N);/ 輸出排序前序列QSort(list, 0, N-1);/ 快速排序show(list, N);/ 輸出排序后序列21、2005年11月23日慧通筆試題:寫(xiě)一函數(shù)判斷某個(gè)整

33、數(shù)是否為回文數(shù),如 12321為回文數(shù)??梢杂门袛嗳霔:统鰲J欠裣嗤瑏?lái)實(shí)現(xiàn)(略微復(fù)雜些),這里是將整數(shù)逆序后 形成另一整 數(shù),判斷兩個(gè)整數(shù)是否相等來(lái)實(shí)現(xiàn)的。#include stdafx.hint lsEchoNum(i nt num) int tmp = 0;for(i nt n = num; n; n /=10)in dex = j;max = k;int main (i nt argc, char* argv) int num = 12321;prin tf(%d %dn, nu m, lsEchoNum( nu m);22、刪除字符串中的數(shù)字并壓縮字符串(神州數(shù)碼以前筆試題),如字符串

34、” abc123fe4fg56”處理后變?yōu)椤?abcdefg”注意空間和效率。(下面的算法只需要一次遍歷,不需 要開(kāi)辟新空間,時(shí)間復(fù)雜度為 0(N)#include stdafx.hvoid delNum(char *str) int i, j=0;/找到串中第一個(gè)數(shù)字的位子for(i=j=0; stri & (stri9); j=+i);/從串中第一個(gè)數(shù)字的位置開(kāi)始,逐個(gè)放入后面的非數(shù)字字符for(; stri; i+)if(stri9)strj+ = stri;strj = 0;int main (i nt argc, char* argv) char str = abc123ef4g4h

35、5;prin tf(%sn, str);delNum(str); prin tf(%sn, str);23、求兩個(gè)串中的第一個(gè)最長(zhǎng)子串(神州數(shù)碼以前試題)。如abractyeyt,dgdsaeactyey的最大子串為actyet。#include stdafx.hchar *MaxSubStri ng(char *str1, char *st int i, j, k, in dex, max=0;for(i=0; str1i; i+)for(j=0; str2j; j+) for(k=0; str1i+k=str2j+k & (str2i+k | str1i+k); k+);if(kmax)

36、/出現(xiàn)大于當(dāng)前子串長(zhǎng)度的子串,則替換子串位置和程度tmp = tmp *10 + n %10; return tmp=num;char *strResult = (char *)calloc(sizeof(char), max+1);for(i=0; imax; i+) strResulti = str2i ndex+;return strResult;int main (i nt argc, char* argv) char str1 = abractyeyt, str2 = dgdsaeactyey;char *strResult = MaxSubStri ng(str1, st;prin

37、 tf(str1=%snstr2=%snM axSubStri ng=%sn, str1, str2, strResult);24、 不開(kāi)辟用于交換數(shù)據(jù)的臨時(shí)空間,如何完成字符串的逆序(在技術(shù)一輪面試 中,有些面試官會(huì)這樣問(wèn))#include stdafx.hvoid cha nge(char *str) for(int i=0,j=strlen(str)-1; idata = A; for(int i=B; in ext = (node *)malloc(sizeof( no de); p-data = i;p-n ext = NULL;return head;void addCircle(node *head, int n) /增加環(huán),將鏈尾指向鏈中第 n個(gè)節(jié)點(diǎn)node *q, *p = head;for(i nt i=1; p-n ext; i+) if(i=n) q = p; p = p-n ext;p-n ext = q;int isCircle( node *head) 數(shù),其他函數(shù)可以不寫(xiě)/這是筆試時(shí)需要寫(xiě)的最主要函node *p=head,*q=head; while( p-n ext & q-n ext) p = p-n ext;if (NULL = (q=q-n ext-n ext) if (p = q)re

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論