background image

     IP

地址由两部分组成,网络号和主机号。不过是要和 子网掩码 按位与上之后才能区分哪些是网络位哪些是

主机位。

13.用户输入 M,N 值,从 1 至 N 开始顺序循环数数,每数到 M 输出该数值,直至全部输出。写出 C 程序。

     循环链表,用取余操作做

14.不能做 switch()的参数类型是:

     switch 的参数不能为实型。

上海华为的一道关于指针方面的编程题

int A[nSize],其中隐藏着若干 0,其余非 0 整数,写一个函数 int Func(int* A, int nSize),使 A 把 0 移至后
面,非 0 整数移至数组前面并保持有序,返回值为原数据中第一个元素为 0 的下标。(尽可能不使用辅助空间且
考虑效率及异常问题,注释规范且给出设计思路)

 

华为笔试题含答案 [软件工程题]

写一个程序, 要求功能:求出用 1,2,5 这三个数不同个数组合的和为 100 的组合个数。

如:100 个 1 是一个组合,5 个 1 加 19 个 5

 

是一个组合。。。。 请用 C++语言写。

答案:最容易想到的算法是:

设 x 是 1 的个数,y 是 2 的个数,z 是 5 的个数,number 是组合数

注意到 0<=x<=100,0<=y<=50,0<=z=20,所以可以编程为:

number=0;

for (x=0; x<=100; x++)

for (y=0; y<=50; y++)

for (z=0; z<=20; z++)

if ((x+2*y+5*z)==100)

number++;

cout<<number<<endl;

上面这个程序一共要循环 100*50*20 次,效率实在是太低了

事实上,这个题目是一道明显的数学问题,而不是单纯的编程问题。我的解法如下:

因为 x+2y+5z=100

所以 x+2y=100-5z,且 z<=20 x<=100 y<=50

所以(x+2y)<=100,且(x+5z)是偶数

对 z 作循环,求 x 的可能值如下: