网易有道面经(2013校园招聘杭州站)

字体大小: 中小 标准 ->行高大小: 标准

上机考试:

网易有道的筛选模式是先上机考试,然后根据上机考试选择大概1/3参加面试。上机的平台和ACM有点类似,提交代码然后有手动阅卷。

上机考试时隔比较久远,不过还能想起两个题目:

1. 给定一个点分IP地址表示,写个程序把它转换成相应的32位的无符号整数并输出,如果输入不是合法数据,就返回0.

这个题目如何利用好标准输入输出,其实可以很容易判断出不合法的输入用例,不过当时没有想好,导致这个题目没有AC。

后来回去写的代码如下:

  1. #include <stdio.h>   #include <string.h>  
  2. bool checkpoint(char *str){   
  3.     int npoint = 0;      while(*str){ 
  4.         (*str) == '.' ? npoint++ : npoint;          if(*(str) != '.' && !((*str) <= '9' && (*str) >= '0')) return false
  5.         str++;      } 
  6.     return npoint == 3;  } 
  7.   bool checkinrange(int addr[4]){ 
  8.     for(int i = 0; i < 4; i++){          if(addr[i] > 255){ 
  9.             return false;          } 
  10.     }      return true
  11. bool convertIP(char s[], int addr[4]){ 
  12.     char tmp[128];      if(checkpoint(s)){ 
  13.         sscanf(s, "%d.%d.%d.%d",addr, addr + 1, addr + 2, addr + 3);          sprintf_s(tmp, sizeof(tmp), "%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]); 
  14.         if(strcmp(s, tmp) == 0 && checkinrange(addr)){              return true
  15.         }   
  16.         //sprintf_s()       } 
  17.     return false;  } 
  18. int main()  { 
  19.     char s[128] = {0};      int addr[4]; 
  20.           while(scanf("%s", s) != EOF){ 
  21.         memset(addr, -1, sizeof(addr));          if(convertIP(s, addr)) 
  22.         {              unsigned int result = 0; 
  23.             result = addr[0] * (0x1 << 24);              result += addr[1] * (0x1 << 16); 
  24.             result += addr[2] * (0x1 << 8);              result += addr[3]; 
  25.             printf("%u\n", result);          } 
  26.         else{              printf("-1\n"); 
  27.         }   
  28.     }   
  29.     return 0;  } 

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/65198.html