2016年华为机试题及答案
要求实现函数:
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)输入:”511002198808081234”,函数返回值:0;
[cpp] view plain copy#include
#include
int verifyIDCard(char* input)
{
int len = strlen(input);
int i;
int year,month,day;
int days0[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int days1[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
int *p0 = days0;
int *p1 = days1;
if(len != 18)
return 1;
for(i = 0 ; i < 17 ;i ++)
{
if(!(input[i] >= '0' && input[i] <= '9'))
return 2;
}
if(!(input[17] >= '0' && input[17] <= '9' || input[17] =='x'))
return 3;
year = (input[6]-'0')*1000+(input[7]-'0')*100+(input[8]-'0')*10+(input[9]-'0');
month = (input[10]-'0')*10+(input[11]-'0');
if(!(year>=1900 && year<=2100))
return 4;
if(!(month>=1 && month<=12))
return 5;
day = (input[12]-'0')*10+(input[13]-'0');
if(year%4 == 0 && year%100 != 0 || year%400 == 0)
{
if(!(day>=1 && day<= *(p1+month-1)))
return 6;
}
else
{
if(!(day>=1 && day<= *(p0+month-1)))
return 6;
}
return 0;
}
int main()
{
char str[50];
int ret;
printf("please input an ID num: ");
scanf("%s",str);
ret = verifyIDCard(str);
printf("the ret num is %d ",ret);
system("pause");
return 0;
}
/* * 给定一个字符串,实现一个函数,按下述方式输出字符串: * 如果此字符的下一个字符和此字符不一样,原样输出此字符, * 否则先输出此字符,再输出此字符连续出现的次数(次数不大于9)。 * 例如,字符串ABBCCCDEDFFF,输出的结果为AB2C3DEDF3。 * * 不用考虑溢出问题,不能使用任何I/O函数 */
可以参考帖子:一道华为机试题
[cpp] view plain copy#include
#include
void change_str(char *s, int len)
{
char *s1 = s;
char *p=s;
char tmp[1024]={0};
char *p_tmp=tmp;
int cnt ;
/*printf("s is %s ", s);*/
*p_tmp = *s;
while(*++p)
{
if(*p == *s1++)
{
cnt++;
*p_tmp = cnt+'0';
continue;
}
if(cnt == 1)
*p_tmp++ = *p;
else
{
p_tmp++;
*p_tmp++ = *p;
cnt = 1;
}
}
*++p_tmp = '';
printf("tmp[] is %s ", tmp);
strcpy(s,tmp);
}
int main(/*int argc, char **argv*/)
{
char str[1024] = "ABBCCCDEDFFF";
change_str(str, 1024);
printf("changed string is %s ", str);
//expected result: AB2C3DEDF3
system("pause");
return 0;
}
【2016年华为机试题及答案】相关文章: