1. 首頁
  2. 面試

c面試題

c面試題

1、給一個字串,例如“ababc”要求返回“ab”,因為“ab”連續重複出現且最長 好長時間不程式設計序了,剛開始的時候編不出來,想開別人寫的,可悲的是看不懂,後來自己編了一個,效率不能有其他的人的好,自己編的還是記錄下來了。 #include

#include#includeint search(char *str,char * substr) { int l_str = strlen(str); int l_substr = strlen(substr); int sum = 0; if(l_str

} void main() { char str[]="ababc"; char sb[]="ab"; int sum =search(str,sb); printf("str:%s,sum:%d\n",sb,sum); f(str); }

2、關於中文漢字截斷

由於漢字是2個字元(這裡不討論可變字元的`情形),因此,在C語言中,用一個固定長度的buffer 存放包含漢字的字串,就有漢字被截斷從而導致半個漢字的情形的出現。半個漢字的存在,對字串的後續處理,會帶來一定的麻煩,比如在xml文件、或者 SQL語句中,如果存在半個漢字,就會導致xml解析失敗,或者sql執行錯誤的異常。為了解決這個問題,有必要找到並刪除半個漢字,或者存放的時候,即 便截斷,也不產生新的半個漢字。

char str[]="中國china";

printf("%s,%d\n",str,strlen(str));

//scanf("%s %s",&str,&substr);

int len = strlen(str);

int n=0;

for(int i=0;i{

if(!(str[i]&0x80))

{

break;

}

n++;

}

printf("%d\n",n);

4、對序列1,1,3,5,8,13......是Fab..數列2,3,4,13...是Fab..質數數列,因為他們與自己前面的Fab數列都互質給出k,返回第k小的Fab..質數。

自己的答案:

#include

#include

#include

#include

bool f1(int n)

{

bool flag = true;

for(int i=2;i<=sqrt(n);i++)

{

if(n%i ==0)

{

flag = false;

break;

}

}

return flag;

}

int ff(int k)

{

int a = 1;

int b = 1;

int n = 1;

while(1)

{

int temp = b;

b = a+b;

a = temp;

printf("|%d\n",b);

if(f1(b)) n++;

if(n==k) return b;

}

}

void main()

{

int k;

scanf("%d",&k);

int b = ff(k);

printf("%d\n",b);

}

#include

#include

#include

#include

bool f1(int n)

{

bool flag = true;

for(int i=2;i<=sqrt(n);i++)

//備註:一個數如果不能被比它平方根小的所有質數整除,那麼它就是質數。

//i從2開始,程式設計的時候,隨便寫了個0,就捅了婁子。

{

if(n%i ==0)

{

flag = false;

break;

}

}

return flag;

}

void ff(int k)

{

int a = 1;

int b = 1;

while(a+b<=k)

{

int temp = b;

b = a+b;

a = temp;

}

while(!f1(b))

{

printf("he\n");

int temp = b;

b = a;

a = temp - b;

}

printf("%d\n",b);

}

void main()

{

int k;

scanf("%d",&k);

ff(k);

}