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);
}
【c面试题】相关文章:
经典C/C++面试题07-11
c面试题08-04
华为C++/MFC面试题07-11
华为面试题C语言软件工程师07-11
华为C/C++笔试题07-11
华为C/C++笔试题系列二07-11
华为面试题07-11
「MySQL」经典面试题07-11
面试题与技巧07-12
采购面试题07-11