华为认证 百分网手机站

华为机试题及答案(2)

时间:2017-09-28 15:45:17 华为认证 我要投稿

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年华为机试题及答案】相关文章:

1.华为C语言上机试题及答案

2.华为认证最新试题及答案

3.2017年华为Java机试题锦集

4.2016年华为机试练习题及答案

5.2016华为认证模拟试题及答案

6.2016年华为笔试题及答案

7.华为笔试题系统程序题及答案

8.华为认证考试试题及答案