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);
}