华为2011上机笔试题3+参考程序
来源:互联网 发布:大数据行业分析 编辑:程序博客网 时间:2024/05/17 03:42
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;
参考程序(欢迎讨论)转载请注明来源http://www.cnblogs.com/jerry19880126/
1 #include <iostream> 2 using namespace std; 3 4 5 // 编程题第一题 6 // 实现手机号码合法性判断的函数 7 int verifyMsisdn(char* inMsisdn) 8 { 9 int len = strlen(inMsisdn); 10 11 // 检测长度是否合法 12 if(len != 13) 13 { 14 return 1; 15 } 16 17 // 检测是否都是数字 18 for(int i = 0; i < len; ++i) 19 { 20 if(inMsisdn[i] <'0' || inMsisdn[i] > '9') 21 { 22 return 2; 23 } 24 } 25 26 // 检测是否以86打头 27 if(inMsisdn[0] != '8' || inMsisdn[1] != '6') 28 { 29 return 3; 30 } 31 32 //是合法的号码 33 return 0; 34 } 35 36 37 void mySort(char *a, int len) 38 { 39 //用插入法 40 for(int i = 1; i < len; ++i) 41 { 42 char temp = a[i]; 43 int j = i - 1; 44 while(j >= 0 && temp < a[j]) 45 { 46 a[j + 1] = a[j]; 47 --j; 48 } 49 a[j + 1] = temp; 50 } 51 } 52 53 // 编程题第二题 54 // 找出元音字母并排序 55 void sortVowel(char* input, char* output) 56 { 57 int len = strlen(input); 58 int outputIndex1 = 0; 59 int outputIndex2 = 0; 60 char *output1 = new char[len];//存放小写字母 61 char *output2 = new char[len];//存放大写字母 62 //查找 63 for(int i = 0; i < len; ++i) 64 { 65 char c = input[i]; 66 if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') 67 { 68 output1[outputIndex1++] = c; 69 } 70 else if(c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') 71 { 72 output2[outputIndex2++] = c; 73 } 74 } 75 76 //排序,先小写字母升序排序,再是大写字母升序排序 77 mySort(output1, outputIndex1); 78 mySort(output2, outputIndex2); 79 80 //合并,先小写再大写 81 for(int i = 0; i < outputIndex1; ++i) 82 { 83 output[i] = output1[i]; 84 } 85 86 for(int i = 0; i < outputIndex2; ++i) 87 { 88 output[i + outputIndex1] = output2[i]; 89 } 90 91 // 加上'\0' 92 output[outputIndex1 + outputIndex2] = '\0'; 93 94 delete [] output1; 95 delete [] output2; 96 } 97 98 99 // 编程题第三题100 // 判断身份证号码的合理性101 int verifyIDCard(char* input)102 {103 int len = strlen(input);104 // 长度判断105 if(len != 18)106 {107 return 1;108 }109 110 // 前17位数字判断111 for(int i = 0; i < 17; ++i)112 {113 if(input[i] < '0' || input[i] > '9')114 {115 return 2;116 }117 }118 119 // 第18位合法性判断120 if( (input[17] < '0' || input[17] > '9') && input[17] != 'x')121 {122 return 3;123 }124 125 // 采集年126 int year = 0, month = 0, day = 0;127 for(int i = 6; i < 10; ++i)128 {129 year = year * 10 + (input[i] - '0');130 }131 // 年信息判断132 if(year < 1900 || year > 2100)133 {134 return 4;135 }136 137 // 采集月138 for(int i = 10; i < 12; ++i)139 {140 month = month * 10 + (input[i] - '0');141 }142 // 月信息判断143 if(month <= 0 || month >=13)144 {145 return 5;146 }147 148 // 采集日149 for(int i = 12; i < 14; ++i)150 {151 day = day * 10 + (input[i] - '0');152 }153 // 日信息判断154 if(day <= 0 || day >= 32)155 {156 return 6;157 }158 if(!(month == 1 || month == 3 || month == 5 || month == 7 || month == 8159 || month == 10 || month == 12))160 {161 // 不是大月162 if(day == 31)163 {164 return 6;165 }166 }167 if(month == 2)168 {169 if(day >= 30)170 {171 return 6;172 }173 if( !((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))174 {175 // 不是闰年176 if(day >= 29)177 {178 return 6;179 }180 }181 }182 return 0;183 }184 185 int main()186 {187 cout << "第一题测试样例:" << endl;188 char* inMsisdn1 = "869123456789";189 char* inMsisdn2 = "8813912345678";190 char* inMsisdn3 = "8613912345678";191 cout << verifyMsisdn(inMsisdn1) << " " <<192 verifyMsisdn(inMsisdn2) << " " <<193 verifyMsisdn(inMsisdn3) << endl;194 195 cout << endl << "第二题测试样例:" << endl;196 char *input = "Abort!May Be Some Errors In Out System";197 char output[50];198 sortVowel(input, output);199 cout << output << endl;200 201 cout << endl << "第三题测试样例:" << endl;202 char* creditCard1 = "511002111222";203 char* creditCard2 = "511002abc123456789";204 char* creditCard3 = "51100219880808123a";205 char* creditCard4 = "511002188808081234";206 char* creditCard5 = "511002198813081234";207 char* creditCard6 = "511002198808321234";208 char* creditCard7 = "511002198902291234";209 char* creditCard8 = "511002198808081234";210 cout << verifyIDCard(creditCard1) << " ";211 cout << verifyIDCard(creditCard2) << " ";212 cout << verifyIDCard(creditCard3) << " ";213 cout << verifyIDCard(creditCard4) << " ";214 cout << verifyIDCard(creditCard5) << " ";215 cout << verifyIDCard(creditCard6) << " ";216 cout << verifyIDCard(creditCard7) << " ";217 cout << verifyIDCard(creditCard8) << endl;218 cout << endl;219 }
- 华为2011上机笔试题3+参考程序
- 华为2011上机笔试题3+参考程序
- 华为2011上机笔试题2+参考程序
- 华为2011上机笔试题2+参考程序
- 华为2011上机笔试题1+参考程序
- 华为2011上机笔试题2+参考程序
- 华为2011上机笔试题3
- 华为上机笔试题
- 华为2011上机笔试题2
- 华为2011上机笔试题1
- 华为2011上机笔试题一
- 华为上机笔试题(2)
- 华为的2012年上机笔试程序
- 华为2012春上机笔试题+参考程序
- 上机笔试题3及程序源码
- 2012华为校园招聘上机笔试题
- 华为2013校园招聘上机笔试题
- 华为公司上机笔试题剖析
- TypeScript Resources
- 趋势科技2011校招笔试题+答案解析
- linux 使用boost
- 线程池服务程序设计(续)
- 设计模式——创建型设计模式总结(简单工厂、普通工厂、抽象工厂、建造者、原型和单例)
- 华为2011上机笔试题3+参考程序
- Spring3+Hibernate4+SpringMVC整合Ext:开发Ext界面及Accordin Tree
- 【设计原则】面向对象编程的六大原则
- opencv2.2 MFC picture控件中显示图片
- 《android课表》之metro风格
- 浙江大华2012笔试题+答案解析
- ubuntu 12 中文输入法的安装
- 阿里巴巴2011笔试题+答案解析
- 线段树——区间合并