C++面試題
1、給定字符串 A 和 B,輸出 A 和 B 中的最大公共子串。比如 A="aocdfe" B="pmcdfa" 則輸出"cdf"
*/
//Author: azhen
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *commanstring(char shortstring[], char longstring[])
{
int i, j;
char *substring=malloc(256);
if(strstr(longstring, shortstring)!=NULL) //如果„„,那么返回 shortstring
return shortstring;
for(i=strlen(shortstring)-1;i>0; i--) //否則,開始循環計算
{
for(j=0; j<=strlen(shortstring)-i; j++){
memcpy(substring, &shortstring[j], i);
substring[i]='\0';
if(strstr(longstring, substring)!=NULL)
return substring;
}
}
return NULL;
}
main()
{
char *str1=malloc(256);
char *str2=malloc(256);
char *comman=NULL;
gets(str1);
gets(str2);
if(strlen(str1)>strlen(str2)) //將短的字符串放前面
comman=commanstring(str2, str1);
else
comman=commanstring(str1, str2);
printf("the longest comman string is: %s\n", comman);
}
2、寫一個函數比較兩個字符串 str1 和 str2 的.大小,若相等返回 0,若 str1 大于str2 返回 1,若 str1 小于 str2 返回-1
int strcmp ( const char * src,const char * dst)
{
int ret = 0 ;
while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
{
++src;
++dst;
}
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return( ret );
}
3、求 1000!的未尾有幾個 0(用素數相乘的方法來做,如 72=2*2*2*3*3);
求出 1->1000 里,能被 5 整除的數的個數 n1,能被 25 整除的數的個數 n2,能被 125 整除的數的個數 n3,
能被 625 整除的數的個數 n4.
1000!末尾的零的個數=n1+n2+n3+n4;
#include<stdio.h>
#define NUM 1000
int find5(int num){
int ret=0;
while(num%5==0){
num/=5;
ret++;
}
return ret;
}
int main(){
int result=0;
int i;
for(i=5;i<=NUM;i+=5)
{
result+=find5(i);
}
printf(" the total zero number is %d\n",result);
return 0;
}
4、有雙向循環鏈表結點定義為:
struct node
{ int data;
struct node *front,*next;
};
有兩個雙向循環鏈表 A,B,知道其頭指針為:pHeadA,pHeadB,請寫一函數將兩鏈表中 data值相同的結點刪除
BOOL DeteleNode(Node *pHeader, DataType Value)
{
if (pHeader == NULL) return;
BOOL bRet = FALSE;
Node *pNode = pHead;
while (pNode != NULL)
{
if (pNode->data == Value)
{
if (pNode->front == NULL)
{
pHeader = pNode->next;
pHeader->front = NULL;
}
else
{
if (pNode->next != NULL)
{
pNode->next->front = pNode->front;
}
pNode->front->next = pNode->next;
}
Node *pNextNode = pNode->next;
delete pNode;
pNode = pNextNode;
bRet = TRUE;
//不要 break 或 return, 刪除所有
}
else
{
pNode = pNode->next;
}
}
return bRet;
}
void DE(Node *pHeadA, Node *pHeadB)
{
if (pHeadA == NULL || pHeadB == NULL)
{
return;
}
Node *pNode = pHeadA;
while (pNode != NULL)
{
if (DeteleNode(pHeadB, pNode->data))
{
if (pNode->front == NULL)
{
pHeadA = pNode->next;
pHeadA->front = NULL;
}
else
{
pNode->front->next = pNode->next;
if (pNode->next != NULL)
{
pNode->next->front = pNode->front;
}
}
Node *pNextNode = pNode->next;
delete pNode;
pNode = pNextNode;
}
else
{
pNode = pNode->next;
}
}
}
【C++面試題】相關文章:
C/C++面試題目11-21
精選C++面試題及答案10-03
C,C++的幾個面試題小集11-24
一個C/C++編程面試題11-22
嵌入式C/C++面試題201611-12
2016年c++經典面試題及答案10-03
華為C++筆試題11-23
聯想C++筆試題11-23
C++筆試實例分析11-22
Sony C++筆試題11-22