}
int len=strlen(a); char b[20];
char *q=transf(9,a,b); cout< 5、一副牌中发五张扑克牌给你:让你判断数字的组成:有以下几种情况: 1:四条:即四张一样数值的牌(牌均不论花色) 2:三条带一对 3:三条带两张不相同数值的牌 4:两对 5:顺子 包括 10,J,Q,K,A 6:什么都不是 7:只有一对 思路:将数组排序,统计相同的数字的个数,再分情况讨论 void sort(int a[]) { int temp; for(int i=0;i<5;i++) for(int j=0;j<5;j++) if(a[i]>a[j]) {temp=a[i];a[i]=a[j];a[j]=temp;} } void test(int a[]) { int *b=new int[5]; int k=1; for(int i=0;i<5;i++) { b[i]=a[i];} for(int j=0;j<4;j++) if(a[j]==a[j+1]) k++; if(k==4){ if(b[1]==b[3]) cout<<\四条\< cout<<\三条带一对\< if(k==3){ if(b[1]!=b[2]||b[2]!=b[3]) cout<<\三条带两个不同的牌\< cout<<\两对\< if(k==2) cout<<\一对\< if(b[4]-b[0]==4&&b[4]-b[1]==3&&b[4]-b[2]==2&&b[4]-b[3]==1) cout<<\顺子< cout<<\什么都不是\< int main() { int a[]={1,2,4,4,4}; test(a); return 0;} 6、求两个数组的和差就是去掉两个数组中相同的元素然后将两个数组中的元素存放在一个新的数组中 ,按大小顺序排序 思路:将数组A和数组B分别进行排序,然后将A与B进行比较,重复的跳过去,不重复的赋给数组C,依次输出。 while(i < la && j < lb) { if(aa[i] < bb[j]) { c[sub] = aa[i]; ++sub; ++i; } else if(aa[i] > bb[j]) { c[sub] = bb[j]; ++sub; ++j; } else if(aa[i] == bb[j]) { ++i; ++j; } } for(; i < la; ++i) {c[sub] = aa[i]; ++sub; } for(; j < lb; ++j) {c[sub] = bb[j]; ++sub; } 7、逆序单链表 node *reverse(node *head) { node *p1,*p2,*p3; p1=head; p2=head->next; while(p2){ p3=p2->next; p2->next=p1; p1=p2; p2=p3; } head->next=NULL; head=p1; return head; } 8、 将一个字符串的元音字母复制到另一个字符串,并排序(30分) 问题描述:有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。 说明:1、 元音字母是a,e,i,o,u,A,E,I,O,U。 2、 筛选出来的元音字母,不需要剔重; 最终输出的字符串,小写元音字母排在前面,大写元音字母排在后面,依次有序。 要求实现函数:void sortVowel (char* input, char* output); using namespace std; void fun(char a[],char s[]) //提取元音字母,放入数组 { int i=0,n=0; while(a[i]!='\\0'){ if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u') s[n++]=a[i]; else if (a[i]=='A'||a[i]=='E'||a[i]=='I'||a[i]=='O'||a[i]=='U') s[n++]=a[i]; i++; } char temp; //将数组排序 for(int i=0;i for(int j=0;j {temp=s[j];s[j]=s[j+1];s[j+1]=temp;} int k=0; //定位大写字母的最后位置 while(s[k]>='A'&&s[k]<='Z'){ k++; } for(int j=0;j char *p=new char[20]; //将字符串变换位置,输出。 char *q=p; for(int i=k;i for(int j=0;j cout< int main() { char str[]=\; char s[20]; fun(str,s); return 0; } 9、身份证号码合法性判断 我国公民的身份证号码特点如下: 1、 长度为18位; 2、 第1~17位只能为数字; 3、 第18位可以是数字或者小写英文字母x。 4、 身份证号码的第7~14位表示持有人生日的年、月、日信息。 例如: 0111或 x。 请实现身份证号码合法性判断的函数。除满足以上要求外,需要对持有人生日的年、月、日信息进行校验。年份大于等于1900年,小于等于2100年。需要考虑闰年、大小月的情况。所谓闰年,能被4整除且不能被100整除 或 能被400整除的年份,闰年的2月份为29天,非闰年的2月份为28天。其他情况的合法性校验,考生不用考虑。 函数返回值: 1) 如果身份证号合法,返回0; 2) 如果身份证号长度不合法,返回1; 3) 如果身份证号第1~17位含有非数字的字符,返回2; 4) 如果身份证号第18位既不是数字也不是英文小写字母x,返回3; 5) 如果身份证号的年信息非法,返回4; 6) 如果身份证号的月信息非法,返回5; 7) 如果身份证号的日信息非法,返回6(请注意闰年的情况); 要求实现函数: int verifyIDCard(char* input) 示例 1) 输入:” ”,函数返回值:1; 2) 输入:” abc”,函数返回值:2; 3) 输入:” a”,函数返回值:3; 4) 输入:” 4”,函数返回值:4; 5) 输入:” 4”,函数返回值:5; 6) 输入:” 4”,函数返回值:6; 7) 输入:” 1989 0229 1234”,函数返回值:7; 8) 输入:” 4”,函数返回值:0; int fun(char *str) { } int main() int year=0,month=0,day=0; if((strlen(str)-1)<18) //1 { for(int i=0;i<18;i++) { if(str[i]>='0'&&str[i]<='9') //2 ; else return 2; if(str[17]=='x'||(str[17]>='0'&&str[17]<='9'))//3 {for(int i=6;i<10;i++) year=year*10+str[i]-'0'; if(year>1900&&year<2100)//4 { for(int i=10;i<12;i++) } else return 4; month=month*10+str[i]-'0'; if(month>0&&month<=12)//5 { for(int i=12;i<14;i++) day=day*10+str[i]-'0'; if(day<=31)//6 { if(year%4!=0&&month==2&&day<=28) return 0; return 0; return 0; else if(year%4==0&&month==2&&day<29) else if(year%4!=4&&month!=2&&day<31) else return 6; } } else return 6; } else return 5; } else return 3; } else return 1;
应聘华为软件的上机试题及部分答案
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)