华为机试题
1.两个字符串中求最长公共子串
#include
#include
char* maxcommonchar(char s1[],char s2[]);
int main()
{
char s1[]=
char s2[]=
char s[15];
char *ps=s;
ps=maxcommonchar(s1,s2);
puts(ps);
return 0;
}
char* maxcommonchar(char s1[],char s2[])
{
int len1=strlen(s1);
int len2=strlen(s2);
int i,j,k,min=len1;
if(len2
min=len2;
for(i=min;i>=2;i--)
{
for(j=0;j
{
for(k=0;k
{
if(strncmp(s1+j,s2+k,i)==0)
{
*(s1+j+i)='\0';
return s1;
}
}
}
}
return NULL;
}
2.身份证号的合法性
#include
#include
int verifyID(char buf[]);
int main()
{
char buf[20]=
int re=verifyID(buf);
switch(re)
{
case 0:
printf(
break;
case 1:
printf(
break;
case 2:
printf(
break;
case 3:
printf(
case 4:
printf(
break;
case 5:
printf(
break;
case 6:
printf(
break;
}
return 0;
}
int verifyID(char buf[])
{
int year=0,month=0,day=0;
int day_num[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
int len=strlen(buf);
if(len!=18)
return 1;
for(i=0;i
{
if(buf[i]>'9' || buf[i]
return 2;
}
if(*(buf+17)!='x' && (*(buf+17)>'9'||(*(buf+17)
return 3;
for(i=6;i
year=year*10+buf[i]-'0';
//strncmp(b,buf+6,4);
//year=int(b);
if(year2100)
return 4;
for(i=10;i
month=month*10+buf[i]-'0';
if(month12)
return 5;
for(i=12;i
day=day*10+buf[i]-'0';
if(month==2 && (year%4==0 && year%100!=0 || year%400==0)) if(day_num[month]+1!=day)
return 6;
if(month==2 && !(year%4==0 && year%100!=0 || year%400==0)) if(day_num[month]!=day)
return 6;
if(month!=2 && day_num[month]!=day)
return 6;
return 0;
}
3.找出一个数组中满足2^N的元素
#include
#include
int find(int a[],int len,int b[]);
int main()
{
int i;
const len=7;
int a[len]={1,2,3,5,7,8,16};
int b[len];
int count=find(a,len,b);
for(i=0;i
{
printf(
}
printf(
return 0;
}
int find(int a[],int len,int b[])
{
int i,j=0,num,flag,count=0;
for(i=0;i
{
flag=1;
num=a[i];
while(num)
{
if(num==1)
break;
if(0!=num%2)
{
flag=0;
break;
}
num=num/2;
}
if(flag)
{
b[j++]=a[i];
count++;
}
}
return count;
}
4. 一个字符串中包含频率最高的相同的子字符串
#include
#include
void fun(char s[]);
int main()
{
char s[]=
fun(s);
return 0;
}
void fun(char s[])
{
int i,j,k,len,max,index,m=0,p=0;
int s1[50],s2[50],s3[50];
char b[50];
len=strlen(s);
for(i=2;i
{
for(j=0;j
{
strncpy(b,s+j,i);
b[i]='\0';
for(k=0;k
{
if(0==strncmp(b,s+j+k,i))
m++;
}
if(m>=2)
{
s1[p]=m;
s2[p]=j;
s3[p]=i;
p++;
m=0;
}
}
}
max=0;
for(i=0;i
{
if(s1[i]>max)
{
max=s1[i];
index=i;
}
}
//*(s+s3[index]+s2[index])='\0';
//puts(s+s3[index]);
for(i=0;i
putchar(s[s2[index]+i]);
putchar('\n');
printf(
}
5.n个字符串中最长的子字符串
#include
#include
char* maxcommonchar(char *str[],char*s,int len);
int main()
{
char *str[3]={
char *ps;
ps=maxcommonchar(str,s,3);
puts(ps);
return 0;
}
char* maxcommonchar(char *str[],char* s,int len)
{
int i,j,k,l,min,flag1,flag2;
int len1,len2,len3;
//char b[20];
len1=strlen(str[0]);
len2=strlen(str[1]);
len3=strlen(str[2]);
min=len1;
if(min>len2)
min=len2;
if(min>len3)
min=len3;
for(i=min;i>=2;i--)
{
for(j=0;j
{
flag1=1;
strncpy(s,str[0]+j,i);
*(s+i)='\0';
for(k=1;k
{
flag2=0;
for(l=0;l
{
if(0==strncmp(s,str[k]+l,i))
{
flag2=1;
break;
}
}
if(!flag2)
{
flag1=0;
break;
}
}
if(flag1)
{
return s;
}
}
}
return NULL;
}
6. 删除一个字符串中某个字符串
#include
#include
void fun(char *s1,char *s2,char *s);
int main()
{
char *s1=
char *s2=
char s[20];
fun(s1,s2,s);
puts(s);
return 0;
}
void fun(char *s1,char *s2,char *s)
{
int i,len1,k,len2,j,m=0;
len1=strlen(s1);
len2=strlen(s2);
for(i=0;i
{
j=0;
if(*(s1+i)!=*(s2+j))
*(s+m++)=*(s1+i);
else
{
k=i;
while((*(s1+k)==*(s2+j))&&*(s2+j)) {
k++;
j++;
}
if(*(s2+j)=='\0')
i=k-1;
else
*(s+m++)=*(s1+i);
}
}
*(s+m)='\0';
}
7.约瑟夫数
#define len 6
#include
#include
void fun(int a[],int len1,int m);
int main()
{
int m=3;
int a[len]={1,2,3,4,5,6};
fun(a,len,m);
return 0;
}
void fun(int a[],int len1,int m)
{
int i=0,j=0,k=0,length=len1;
int b[len];
while(length>=1)
{
if(a[i]!=0)
j++;
if(j==m)
{
b[k++]=a[i];
a[i]=0;
j=0;
length--;
}
i++;
if(len==i)
i=0;
}
for(i=0;i
printf(
putchar('\0');
}
8.符串中空格分隔的单词的最大长度
//查找字符串中空格分隔的单词的最大长度 #include
#include
void find(char a[]);
int main()
{
char a[50]=
return 0;
}
void find(char a[])
{
int len=strlen(a);
int i=0,count=0,max=0,index,j;
while(a[i]!='\0')
{
while(a[i]!=' ' && a[i]!='\0')
{
i++;
count++;
}
if(count>max)
{
max=count;
index=i;
}
count=0;
i++;
}
for(j=i-max;j
putchar(a[j]);
putchar('\0');
printf(
}