huawei考题

偶同事去深圳华为公司面试后,带回几道面试题:  
   
    1、   用你熟悉的编程语言,写一段冒泡法的程序  
    2、   两台电脑直接连线,用的是什么协议  
   
  ……  
   
  (最后一关)  
  总共有12个乒乓球,其中有一个不合格,  
  问   如何用天平秤3次可以知道那一个不合格    
  (不合格的球不知是轻是重)    
   
   
  请各路神仙解答   ,呵呵
A:
第一次,先将1-4号放在左边,5-8号放在右边。    
    1.如果右重则坏球在1-8号。    
      第二次将2-4号拿掉,将6-8号从右边移到左边,把9-11号放    
      在右边。就是说,把1,6,7,8放在左边,5,9,10,11放在右边。    
        1.如果右重则坏球在没有被触动的1,5号。如果是1号,    
         则它比标准球轻;如果是5号,则它比标准球重。    
          第三次将1号放在左边,2号放在右边。    
            1.如果右重则1号是坏球且比标准球轻;    
            2.如果平衡则5号是坏球且比标准球重;    
            3.这次不可能左重。    
        2.如果平衡则坏球在被拿掉的2-4号,且比标准球轻。    
          第三次将2号放在左边,3号放在右边。    
            1.如果右重则2号是坏球且比标准球轻;    
            2.如果平衡则4号是坏球且比标准球轻;    
            3.如果左重则3号是坏球且比标准球轻。    
        3.如果左重则坏球在拿到左边的6-8号,且比标准球重。    
          第三次将6号放在左边,7号放在右边。    
            1.如果右重则7号是坏球且比标准球重;    
            2.如果平衡则8号是坏球且比标准球重;    
            3.如果左重则6号是坏球且比标准球重。    
    2.如果天平平衡,则坏球在9-12号。    
      第二次将1-3号放在左边,9-11号放在右边。    
        1.如果右重则坏球在9-11号且坏球较重。    
          第三次将9号放在左边,10号放在右边。    
            1.如果右重则10号是坏球且比标准球重;    
            2.如果平衡则11号是坏球且比标准球重;    
            3.如果左重则9号是坏球且比标准球重。    
        2.如果平衡则坏球为12号。    
          第三次将1号放在左边,12号放在右边。    
            1.如果右重则12号是坏球且比标准球重;    
            2.这次不可能平衡;    
            3.如果左重则12号是坏球且比标准球轻。    
        3.如果左重则坏球在9-11号且坏球较轻。    
          第三次将9号放在左边,10号放在右边。    
            1.如果右重则9号是坏球且比标准球轻;    
            2.如果平衡则11号是坏球且比标准球轻;    
            3.如果左重则10号是坏球且比标准球轻。    
    3.如果左重则坏球在1-8号。    
      第二次将2-4号拿掉,将6-8号从右边移到左边,把9-11号放    
      在右边。就是说,把1,6,7,8放在左边,5,9,10,11放在右边。    
        1.如果右重则坏球在拿到左边的6-8号,且比标准球轻。    
          第三次将6号放在左边,7号放在右边。    
            1.如果右重则6号是坏球且比标准球轻;    
            2.如果平衡则8号是坏球且比标准球轻;    
            3.如果左重则7号是坏球且比标准球轻。    
        2.如果平衡则坏球在被拿掉的2-4号,且比标准球重。    
          第三次将2号放在左边,3号放在右边。    
            1.如果右重则3号是坏球且比标准球重;    
            2.如果平衡则4号是坏球且比标准球重;    
            3.如果左重则2号是坏球且比标准球重。    
        3.如果左重则坏球在没有被触动的1,5号。如果是1号,    
         则它比标准球重;如果是5号,则它比标准球轻。    
          第三次将1号放在左边,2号放在右边。    
            1.这次不可能右重。    
            2.如果平衡则5号是坏球且比标准球轻;    
            3.如果左重则1号是坏球且比标准球重;
2.3.冒泡法的function(c#)  
  public   void   BubbleSort(int[]   R)    
      {    
        int   i,j,temp;    
        //交换标志    
        bool   exchange;    
        //最多做R.Length-1趟排序    
        for(i=0;   i<R.Length;   i++)    
        {    
        //本趟排序开始前,交换标志应为假    
        exchange=false;    
        for(j=R.Length-2;   j>=i;   j--)    
        {    
        //交换条件    
        if(R[j+1]<R[j])    
        {    
        temp=R[j+1];    
        R[j+1]=R[j];    
        R[j]=temp;    
        //发生了交换,故将交换标志置为真    
        exchange=true;    
        }    
        }    
        //本趟排序未发生交换,提前终止算法    
        if(!exchange)    
        {    
        break;    
        }    
        }    
      }
像小学数学竞赛题哈!不停的推答案就出来了  
  你思考的过程和这个题目的答案真相同  
  人类思考模式:  
  while(失败)  
  {  
  换个方法;  
  if(新方法成功)break;  
  else   继续  
  }
3.首先将球分为3组,每组4个,分别为(A1、A2、A3、A4;B1、B2、B3、B4;C1、C2、C3、C4)  
  首先,选任意的两组球放在天平上称。例如,我们把A、B两组放在天平上称。这就会出现两种情况:    
      
      第一种情况,天平两边平衡。那么,不合格的坏球必在c组之中。    
      
      其次,从c组中任意取出两个球   (例如C1、C2)来,分别放在左右两个盘上,称第二次。这时,又可能出现两种情况:    
      
      1·天平两边平衡。这样,坏球必在C3、C4中。这是因为,在12个乒乓球中,只有一个是不合格的坏球。只有C1、C2中有一个是坏球时,天平两边才不平衡。既然天平两边平衡了,可见,C1、C2都是合格的好球。    
      
      称第三次的时候,可以从C3、C4中任意取出一个球(例如C3),   同另一个合格的好球(例如C1)分别放在天平的两边,就可以推出结果。这时候可能有两种结果:如果天平两边平衡,那么,坏球必是C4;如果天平两边不平衡,那么,坏球必是C3。    
      
      2·天平两边不平衡。这样,坏球必在C1、C2中。这是因为,只有C1、C2中有一个是坏球时,天平两边才不能平衡。这是称第二次。  
      
      称第三次的时候,可以从C1、C2中任意取出一个球(例如C1),   同另外一个合格的好球(例如C3),分别放在天平的两边,就可以推出结果。道理同上。    
      
      以上是第一次称之后出现第一种情况的分析。    
      
      第二种情况,第一次称过后天平两边不平衡。这说明,c组肯定都是合格的好球,而不合格的坏球必在A组或B组之中。    
      
      我们假设:A组   (有A1、A2、A3、A4四球)重,B组(有B1、B2、B3、B4四球)轻。这时候,需要将重盘中的A1取出放在一旁,将A2、A3取出放在轻盘中,A4仍留在重盘中。同时,再将轻盘中的B1、   B4取出放在一旁,将B2取出放在重盘中,B3仍留在轻盘中,另取一个标准球C1也放在重盘中。经过这样的交换之后,每盘中各有三个球:   原来的重盘中,现在放的是A4、B2、C1,原来的轻盘中,现在放的是A2、A3、B3。  
      
      这时,可以称第二次了。这次称后可能出现的是三种情况:    
      
      1·天平两边平衡。这说明A4B2C1=A2A3B3,亦即说明,这六只是好球,这样,坏球必在盘外的A1或B1或B4之中。已知A盘重于B盘。所以,A1或是好球,或是重于好球;而B1、B4或是好球,或是轻于好球。    
      
      这时候,可以把B1、B4各放在天平的一端,称第三次。这时也可能出现三种情况:(一)如果天平两边平衡,可推知A1是不合格的坏球,这是因为12只球只有一只坏球,既然B1和B4重量相同,可见这两只球是好球,而A1为坏球;(二)B1比B4轻,则B1是坏球;(三)   B4比B1轻,则B4是坏球,这是因为B1和B4或是好球,或是轻于好球,所以第三次称实则是在两个轻球中比一比哪一个更轻,更轻的必是坏   球。    
      
      2·放着A4、B2、C1的盘子(原来放A组)比放A2、A3、B3的盘子(原来放B组)重。在这种情况下,则坏球必在未经交换的A4或B3之中。这是因为已交换的B2、A2、A3个球并未影响轻重,可见这三只球都是好球。    
      
      以上说明A4或B3这其中有一个是坏球。这时候,只需要取A4或B3同标准球C1比较就行了。例如,取A4放在天平的一端,取C1放在天平的另一端。这时称第三次。如果天平两边平衡,那么B3是坏球;   如果天平不平,那么A4就是坏球   (这时A4重于C1)。  
      
      3.放A4、B2、C1的盘子(原来放A组)比放在A2、A3、B3的盘   子(原来放B组)轻。在这种情况下,坏球必在刚才交换过的A2、A3、B23球之中。这是因为,如果A2、A3、B2都是好球,那么坏球必在A4或B3之中,如果A4或B3是坏球,那么放A4、B2、C1的盘子一定   重于放A2、A3、B3的盘子,现在的情况恰好相反,所以,并不是A2、A3、B2都是好球。    
      
      以上说明A2、A3、B2中有一个是坏球。这时候,只需将A2同A3相比,称第三次,即推出哪一个是坏球。把A2和A3各放在天平的一端   称第三次,可能出现三种情况:(一)天平两边乎衡,这可推知B2是坏球;(二)A2重于A3,可推知A2是坏球;(三)A3重于A2,可推知A3是坏球。    
      
      根据称第一次之后,出现的A组与B组轻重不同的情况,我们刚才假设A组重于B组,并作了以上的分析,说明在这种情况下如何推论哪一个球是坏球。如果我们现在假定出现的情况是A组轻于B组,这又该如何推论?请你们试着自己推论一下。  
4.有17枚硬币     分3次    
  第一次分其中的1/2  
  第二次分其中的1/3  
  第三次分其中的1/9  
  怎么分吧?  
A:加上一枚  
  18枚  
  1/2是9  
  1/3是6  
  1/9是2  
  9+6+2=17  
  那个没用  
   
  小时候做的题目  
  不过现在想起来不是那么严谨了  
  1/2+1/3+1/9不等于1  
1/2   :   1/3   :1/9   =   9:6:2  


与分马问题一样。  
  1/2+1/3+1/9=17/18,先补充一枚硬币,按要求分后剩下一枚硬币还回。
ps:不等于一也是可以分的。这体现了极限的思想。
按照我的想法,华为出题是让面试着突破原来的答案,有所创新。  
  比如说,大家可不可以把它理解为编程的问题,不过是个思路而已。:-)  
  另外,我有一个解决方案,仅供参考:  
  最后的分配方案:6:4:2,大家千万别忘了收个人所得税。  
  我们假设2元是最低生活保障线,虽然第三个人实际上拿不到2元(1.889),但我们要保证  
  这最低生活保障线,不是?  
  好了,第二个人收入为:5.67元,收取个人所得税1.67元,  
  第一个人收入为:8.5元,收取个人所得税2.5元。  
  大家如果按比例放大,基本上与我国现行的税收和福利制度一致。  
  其余6元作为国家建设。(分钱的时候为何不是总和为1,就有道理了:  
  企业要发展,国家建设也需要啊!!!)  

我是听一个面试过的同学说的  
    记的不是很完整  
   
    C++   的面向对象中的   多态、虚函数,  
        还有泛型思想中的   模板,类模板,函数模板,  
   
    还会问你   数据结构中的   基本排序,查找算法、  
                      数据库理论中   范式,  
                      操作系统中的   进程的调度  
     
    我就记得我同学说了这些,他还谈到要过三关  
    第一关,是一个主管,问你   技术  
    第二关,是一个主观,问你   自身职业规划  
    他走到第三关!  
   
    祝你好运,Good   Luck   :-)
##
有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。  
  以7个数为例:  
        {0,1,2,3,4,5,6,7}   0-->1-->2(删除)-->3-->4-->5(删除)-->6-->7-->0(删除),如此循环直到最后一个数被删除。   
   
A:#include<iostream>  
  using   namespace   std;  
  #define   null   1000  
  int   main()  
  {  
  int   arr[1000];  
  for   (int   i=0;i<1000;++i)  
  arr[i]=i;  
  int   j=0;  
  int   count=0;  
  while(count<999)  
  {  
  while(arr[j%1000]==null)  
  j=(++j)%1000;  
  j=(++j)%1000;  
  while(arr[j%1000]==null)  
  j=(++j)%1000;  
  j=(++j)%1000;  
  while(arr[j%1000]==null)  
  j=(++j)%1000;  
  arr[j]=null;  
  ++count;  
  }  
  while(arr[j]==null)  
  j=(++j)%1000;  
  cout<<j<<endl;  
          return   0;  
  }  
   
  603不知道对不对
a2:
家要求就是用数组,我程序的答案也是603  
  #include   <iostream.h>  
   
  const   int   size=1000;    
  void   main()  
  {  
        int   arr[size];  
        int   currentSize=size;   //指示当前数组中还剩余有效元素的个数;  
        int   count=0;       //计数用;  
        for(int   k=0;k<size;k++)  
        {  
        arr[k]=k;  
        }  
         
         
        for(int   i=0;(i<size)   &&   (currentSize!=1);   i=(i+1)%size)  
        {  
        if(arr[i]!=-1)  
        {  
        if(count>=0   &&   count<2)  
        {  
        count++;  
        }else   if(   count==2)  
        {  
            arr[i]=-1;//删除此时的元素;  
    currentSize--;//有效元素减一;  
    count=0;//并将计数值归零;  
        }  
        }      
        }  
        for(int   j=0;j<size;j++)  
        {  
        if(arr[j]!=-1)  
        {  
        cout<<"the   result   is   :"<<j<<endl;  
        break;  
        }  
        }  
  }
这是一个用一个外国人命名的问题。具体叫什么我是实在想不起来了。用厄拉多塞筛那种方法。这是很简单的,间隔才一个数字,是最简单的了。  
   
  我想去华为试试,但是我没有英语四级,真是没有办法。  
  很多单位我想去试试,但没有四级,连试的机会都没有。  
  有谁和我有同感的吗?  
   
  --------------------------------------------------------------------  
  可以进惠通阿  
  惠通不要求四级的       有人一样没四级     在惠通做得很好      
  关键是技术     自信点     怕个P啊
##

请教:华为面试题

楼主kasad()2005-09-04 12:07:22 在 C/C++ / C语言 提问

#include   <stdio.h>  
  void   main()  
  {  
  union  
  {  
  struct  
  {  
        unsigned   short   s1:3;  
        unsigned   short   s2:3;  
        unsigned   short   s3:3;  
  }x;  
  char   c;  
  }v;  
  v.c=100;  
  printf("%d\n",v.x.s3);  
  }    
  A:4         B:0           C:3         D:6  
  答案是A  
  但我在TURBO   C中运行答案是1  
  请问   是因为TURBO   C   版本在原因而运行结果不一样吗?  
  我用在TURBO   C   V2.0版本  
  能解释一下为甚么是4或1?    
  而v.x.s1和v.x.s2的   值   在TURBO   C   V2.0版本运行的结果是4?  
  其中unsigned   short   s1:3;   中的“:”又是什么意思?

a:
答案4  
   
  二、位结构    
          位结构是一种特殊的结构,   在需按位访问一个字节或字的多个位时,   位结构    
  比按位运算符更加方便。    
          位结构定义的一般形式为:    
            struct位结构名{    
                      数据类型   变量名:   整型常数;    
                      数据类型   变量名:   整型常数;    
            }   位结构变量;    
          其中:   数据类型必须是int(unsigned或signed)。   整型常数必须是非负的整    
  数,   范围是0~15,   表示二进制位的个数,   即表示有多少位。    
          变量名是选择项,   可以不命名,   这样规定是为了排列需要。    
          例如:   下面定义了一个位结构。    
            struct{    
                      unsigned   incon:   8;     /*incon占用低字节的0~7共8位*/    
                      unsigned   txcolor:   4;/*txcolor占用高字节的0~3位共4位*/    
                      unsigned   bgcolor:   3;/*bgcolor占用高字节的4~6位共3位*/    
                      unsigned   blink:   1;     /*blink占用高字节的第7位*/    
            }ch;    
          位结构成员的访问与结构成员的访问相同。    
          例如:   访问上例位结构中的bgcolor成员可写成:    
              ch.bgcolor    
       
          注意:    
          1.   位结构中的成员可以定义为unsigned,   也可定义为signed,     但当成员长    
  度为1时,   会被认为是unsigned类型。因为单个位不可能具有符号。    
          2.   位结构中的成员不能使用数组和指针,   但位结构变量可以是数组和指针,    
  如果是指针,   其成员访问方式同结构指针。    
          3.   位结构总长度(位数),   是各个位成员定义的位数之和,     可以超过两个字    
  节。    
          4.   位结构成员可以与其它结构成员一起使用。    
          例如:    
            struct   info{    
                      char   name[8];    
                      int   age;    
                      struct   addr   address;    
                      float   pay;    
                      unsigned   state:   1;    
                      unsigned   pay:   1;    
                      }workers;'    
          上例的结构定义了关于一个工从的信息。其中有两个位结构成员,   每个位结    
  构成员只有一位,   因此只占一个字节但保存了两个信息,   该字节中第一位表示工    
  人的状态,   第二位表示工资是否已发放。由此可见使用位结构可以节省存贮空间。

转载于:https://www.cnblogs.com/borcala/archive/2007/12/19/1006229.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值