C 經典演算法題(一)

2021-08-20 21:20:25 字數 3630 閱讀 5666

//1.實現strcpy.

char* mystrcpy( char *pdest, const char *psrc )    

if( pdest == psrc )    

char *piter = pdest + strlen( pdest );    

while( ( *piter++=*psrc++ ) != '\0' );    

return pdest;    

//3.實現cstring字串類預設四個方法

class mycstring    

else    

}    

mycstring( const mycstring &other )    

~mycstring()    

}    

const mycstring& operator =( const mycstring &other )    

delete mpdata;    

mpdata = new char[ strlen( other.mpdata ) + 1 ];    

assert( nullptr != mpdata );    

strcpy( mpdata, other.mpdata );    

return *this;    

}    

private:    

char *mpdata;    

};//4.不使用第三個變數交換兩個數的值   

void swapa( int &a, int &b )    

a = a + b;    

b = a - b;    

a = a - b;    

}    

void swapb( unsigned int &a, unsigned int &b )    //變數進行或運算

a = a ^ b;    

b = a ^ b;    

a = a ^ b;    

}//5.實現乙個將字串逆序的方法    (軸對稱兩兩置換)

char* myinverted( char *pdest )    

return pdest;    

語言中字串轉數字的方法是什麼( atoi ),請實現它 (倒敘算差值,求累加值)

int myatoi( const char *pstring )    

return value;    

//7.實現乙個將字串中所有字母轉換為大寫的方法

char* myupper( char *pdest )    

*i -= 'a' - 'a';    

}    

return pdest;    

//8.已知乙個陣列已經降序排序請用二分查字法找到其中的某個元素找到返回索引否則返回-1    

int binarysearch( int *parray, int count, int value )    

else if( value > parray[ mid ] )    

else    

}    

return -1;    

}    

//9.刪除鍊錶中值為value的所有元素( [head]->[node1]->[node2]->...[noden] )  

struct node    

;void deletefromlist( node *phead, int value )  

else  

}  //10.在鍊錶index位置插入新的值為value的元素    

void insertfromlist( node *phead, int index, int value )    

//11.將鍊錶逆序 (使用兩個指標位置下移指向調換達到目的)

node* invertedfromlist( node *phead )    

phead->mpnext = nullptr;//c->b->a->null  

return pprev;            //return c( new head )  

//12.判斷x年x月x日是這年的第幾天    

int getday( int year, int month, int day )  

;    

if( ( year % 4 == 0 && year % 100 != 0 ) || ( year % 400 == 0 ) )    

int days = 0;    

for( int i = 1; i < month; ++i )    

days += day;    

return days;    

//14.遞迴求斐波拉契數列數列第n項  

int getfibonacci2( int n )  

return getfibonacci2( n - 1 ) + getfibonacci2( n - 2 );  

//15.實現乙個產生[n-m]區間數字的隨機方法  

int getrandomrange( int n, int m )  

if( n > m )  

return n + ( rand() % ( m - n + 1 ) );  

//16.請用棧實現佇列  

int queuepop( std::stack< int > &stacka )  

const int top = stackb.top();  

stackb.pop();  

while( false == stackb.empty() )  

return top;  

//17.已知x班x成績0-100分編寫乙個方法實現0-59列印不合格,60-69列印合格,70-79列印良好,80-100列印優秀

//不能使用if,:?,switch  

void printscore( int score )  

;  printf( "%s\n", pstring[ score / 10 ] );  

//18.實現strncpy  

char *mystrncpy( char *pdest, const char *psrc, int count )  

if( count <= 0 )  

char *pstart = pdest;  

while( ( count-- ) > 0 && ( *pstart++=*psrc++ ) );  

*pstart = '\0';  

return pdest;  

// 19.如何判斷鍊錶是否有環  

bool isloop( node *phead )  

}  return false;  

//20.統計出乙個字串每種字母出現的次數要求時間複雜度為o(n)  

void countletter( const char *psrc )  

;  for( ; *psrc !='\0'; ++psrc )  

++count[ c ];  

}  }

經典演算法題

題目 古典問題 有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第四個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?1.程式分析 兔子的規律為數列1,1,2,3,5,8,13,21 分析 首先這個你得找規律,這個剛開始的時候不要太心急。不難看出有個很好的式子 從第三個...

C 經典演算法題 生命遊戲

生命遊戲 game of life 為1970年由英國數學家j.h.conway所提出,某一細胞的鄰居包括上 下 左 右 左上 左下 右上與右下相鄰之細胞,遊戲規則如下 孤單死亡 如果細胞的鄰居小於乙個,則該細胞在下一次狀態將死亡。擁擠死亡 如果細胞的鄰居在四個以上,則該細胞在下一次狀態將死亡。穩定...

C 經典演算法題 數字拆解

這個題目來自於 數字拆解,我將之改為c語言的版本,並加上說明。題目是這樣的 3 2 1 1 1 1 所以3有三種拆法4 3 1 2 2 2 1 1 1 1 1 1 共 五 種5 4 1 3 2 3 1 1 2 2 1 2 1 1 1 1 1 1 1 1共七種 依此類推,請問乙個指定數字num的拆解方...