华为2011上机笔试题3

发布时间:2014-10-22 13:18:34编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"华为2011上机笔试题3",主要涉及到华为2011上机笔试题3方面的内容,对于华为2011上机笔试题3感兴趣的同学可以参考一下。

1. 手机号码合法性判断(20分) 问题描述: 我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下: 1、  长度13位; 2、  以86的国家码打头; 3、  手机号码的每一位都是数字。   请实现手机号码合法性判断的函数(注:考生无需关注手机号码的真实性,也就是说诸如86123123456789这样的手机号码,我们也认为是合法的),要求: 1)  如果手机号码合法,返回0; 2)  如果手机号码长度不合法,返回1 3)  如果手机号码中包含非数字的字符,返回2; 4)  如果手机号码不是以86打头的,返回3; 【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。 要求实现函数: int verifyMsisdn(char* inMsisdn) 【输入】 char* inMsisdn,表示输入的手机号码字符串。 【输出】  无 【返回】  判断的结果,类型为int。 示例 输入:  inMsisdn = “869123456789“ 输出:  无 返回:  1 输入:  inMsisdn = “88139123456789“ 输出:  无 返回:  3 输入:  inMsisdn = “86139123456789“ 输出:  无 返回:  0     2. 将一个字符串的元音字母复制到另一个字符串,并排序(30分) 问题描述: 有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。 说明: 1、  元音字母是a,e,i,o,u,A,E,I,O,U。 2、  筛选出来的元音字母,不需要剔重(chong); 最终输出的字符串,小写元音字母排在前面,大写元音字母排在后面,依次有序。 要求实现函数: void sortVowel (char* input, char* output); 【输入】  char* input,表示输入的字符串 【输出】  char* output,排好序之后的元音字符串。 【返回】  无 示例 输入:char *input = “Abort!May Be Some Errors In Out System. “ 输出:char *output =“aeeeooouAEIO “     3.我国公民的身份证号码特点如下: 1、     长度为18位; 2、     第1~17位只能为数字; 3、     第18位可以是数字或者小写英文字母x。 4、     身份证号码的第7~14位表示持有人生日的年、月、日信息。 例如:511002198808080111或51100219880808011x。   请实现身份证号码合法性判断的函数。除满足以上要求外,需要对持有人生日的年、月、日信息进行校验。年份大于等于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(请注意闰年的情况); 【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。 要求实现函数: int verifyIDCard(char* input) 【输入】  char* input,表示输入的身份证号码字符串 【输出】  无 【返回】  判断的结果,类型为int 示例 1) 输入:”511002111222”,函数返回值:1; 2) 输入:”511002abc123456789”,函数返回值:2; 3) 输入:”51100219880808123a”,函数返回值:3; 4) 输入:”511002188808081234”,函数返回值:4; 5) 输入:”511002198813081234”,函数返回值:5; 6) 输入:”511002198808321234”,函数返回值:6; 7) 输入:”511002198902291234”,函数返回值:6; 8) 输入:”511002198808081234”,函数返回值:0; #include <iostream> using namespace std; // 编程题第一题 // 实现手机号码合法性判断的函数 int verifyMsisdn(char* inMsisdn) { int len = strlen(inMsisdn); // 检测长度是否合法 if(len != 13) { return 1; } // 检测是否都是数字 for(int i = 0; i < len; ++i) { if(inMsisdn[i] <'0' || inMsisdn[i] > '9') { return 2; } } // 检测是否以86打头 if(inMsisdn[0] != '8' || inMsisdn[1] != '6') { return 3; } //是合法的号码 return 0; } void mySort(char *a, int len) { //用插入法 for(int i = 1; i < len; ++i) { char temp = a[i]; int j = i - 1; while(j >= 0 && temp < a[j]) { a[j + 1] = a[j]; --j; } a[j + 1] = temp; } } // 编程题第二题 // 找出元音字母并排序 void sortVowel(char* input, char* output) { int len = strlen(input); int outputIndex1 = 0; int outputIndex2 = 0; char *output1 = new char[len];//存放小写字母 char *output2 = new char[len];//存放大写字母 //查找 for(int i = 0; i < len; ++i) { char c = input[i]; if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') { output1[outputIndex1++] = c; } else if(c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') { output2[outputIndex2++] = c; } } //排序,先小写字母升序排序,再是大写字母升序排序 mySort(output1, outputIndex1); mySort(output2, outputIndex2); //合并,先小写再大写 for(int i = 0; i < outputIndex1; ++i) { output[i] = output1[i]; } for(int i = 0; i < outputIndex2; ++i) { output[i + outputIndex1] = output2[i]; } // 加上'\0' output[outputIndex1 + outputIndex2] = '\0'; delete [] output1; delete [] output2; } // 编程题第三题 // 判断身份证号码的合理性 int verifyIDCard(char* input) { int len = strlen(input); // 长度判断 if(len != 18) { return 1; } // 前17位数字判断 for(int i = 0; i < 17; ++i) { if(input[i] < '0' || input[i] > '9') { return 2; } } // 第18位合法性判断 if( (input[17] < '0' || input[17] > '9') && input[17] != 'x') { return 3; } // 采集年 int year = 0, month = 0, day = 0; for(int i = 6; i < 10; ++i) { year = year * 10 + (input[i] - '0'); } // 年信息判断 if(year < 1900 || year > 2100) { return 4; } // 采集月 for(int i = 10; i < 12; ++i) { month = month * 10 + (input[i] - '0'); } // 月信息判断 if(month <= 0 || month >=13) { return 5; } // 采集日 for(int i = 12; i < 14; ++i) { day = day * 10 + (input[i] - '0'); } // 日信息判断 if(day <= 0 || day >= 32) { return 6; } if(!(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)) { // 不是大月 if(day == 31) { return 6; } } if(month == 2) { if(day >= 30) { return 6; } if( !((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) { // 不是闰年 if(day >= 29) { return 6; } } } return 0; } int main() { cout << "第一题测试样例:" << endl; char* inMsisdn1 = "869123456789"; char* inMsisdn2 = "8813912345678"; char* inMsisdn3 = "8613912345678"; cout << verifyMsisdn(inMsisdn1) << " " << verifyMsisdn(inMsisdn2) << " " << verifyMsisdn(inMsisdn3) << endl; cout << endl << "第二题测试样例:" << endl; char *input = "Abort!May Be Some Errors In Out System"; char output[50]; sortVowel(input, output); cout << output << endl; cout << endl << "第三题测试样例:" << endl; char* creditCard1 = "511002111222"; char* creditCard2 = "511002abc123456789"; char* creditCard3 = "51100219880808123a"; char* creditCard4 = "511002188808081234"; char* creditCard5 = "511002198813081234"; char* creditCard6 = "511002198808321234"; char* creditCard7 = "511002198902291234"; char* creditCard8 = "511002198808081234"; cout << verifyIDCard(creditCard1) << " "; cout << verifyIDCard(creditCard2) << " "; cout << verifyIDCard(creditCard3) << " "; cout << verifyIDCard(creditCard4) << " "; cout << verifyIDCard(creditCard5) << " "; cout << verifyIDCard(creditCard6) << " "; cout << verifyIDCard(creditCard7) << " "; cout << verifyIDCard(creditCard8) << endl; cout << endl; }


上一篇:拉格朗日对偶性
下一篇:百度笔试题:malloc/free与new/delete的区别

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款