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啊
##
答案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;'
上例的结构定义了关于一个工从的信息 。其中有两个位结构成员, 每个位结
构成员只有一位, 因此只占一个字节但保存了两个信息, 该字节中第一位表示工
人的状态, 第二位表示工资是否已发放。由此可见使用位结构可以节省存贮空间。
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(新方法
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元是最低
这最低生活保障线,不是?
好了,第二个人收入为: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啊
##
请教:华为面试题
#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; 中的“:”又是什么意思?
答案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;'
上例的结构定义了关于一个工从的
构成员只有一位, 因此只占一个字节但保存了两个信息, 该字节中第一位表示工
人的状态, 第二位表示工资是否已发放。由此可见使用位结构可以节省存贮空间。