[面试]今天泰山-在线-面试.

来源:互联网 发布:c语言有多少个关键字 编辑:程序博客网 时间:2024/04/27 22:39

我的笔试,如果说100分的话,技术题40分,智力题60分.

现在把笔试内容回忆如下:
技术题
1)"include.h" 与 <include.h>的区别.
老掉牙的问题了,前者适用于用户自定义头文件(速度快),后者适用于系统头文件.

2)C语言中static的用法
   1)在函数内部修饰一个变量
   2)在模块中修饰一个变量
   3)在模块中修饰一个函数
  2,3的答案都基本一样,都是为了降低模块见的耦合度,使得变量或函数在别的模块中不可见.
因为在C语言中,默认的函数在所有模块中均可见,不需要头文件.全局变量也是,全部模块都可见.
   参见另一帖子,C中static的使用.

3)用宏定义 一年中有多少秒.(不考闰年影响)
  #define SECONDS_IN_A_YEAR (365*24*60*60)

4)用宏定义一个函数MIN,返回两个数中的较小值.
 #define MIN(a,b)  ((a)>(b)?(b):(a))

5)用c语言编写,对int a模2运算, 不使用'%'算符.
 a = a & 0x00000001;


智力题
5)一个缸中放了红黄蓝三中颜色球,闭着眼每次从缸中摸出两个球,问摸几次后能摸出颜色一样的两个球?
 两次
6)烧线问题.材质密度均不同的线若干,每一根燃烧完均要1小时,问怎么能定位出1小时15分的时间?
 网上一搜一大堆
7)水桶问题.有两个形状不规则的水桶,一个3公升,一个5公升,问怎么定位出4公升的水?如果能用两种方法最好.(水最终要放在这两个桶里面,不能借助别的桶.)
 4 = 5-1;
 4 = 3+1; 关键是定位出1公升的水.
 思路1:5公升水倒入3公升桶中,还剩2公升.
            清空3公升桶里的水,把还剩的2公升接着倒入3公升桶中.
            再装满5公升的桶,往3公升桶中加水到满为止.
8)问24小时中,时针,分针,秒针完全重合的情况有几次?分别是什么时候?你是怎么计算的?
  3次,分别是0点,12点,24点.
  分析.由于秒针每次走整数角度,所以,如果重合,重合发生在整数刻度处.
  设在k点过a角度处发生重合, 0<=k<=11.(0点到11点), 0<=a<=30°(每个小时之间的角度是30°)
  对时针而言,30度对应60分.每一度对应2分钟,a度对应2a分钟.
  对分针而言,360度对应60分,每一度对应1/6分,30*k+a度对应(30*k+a)/6分钟.
  任何时候,通过时针求出的时间和通过分针求出的时间是一样的,所以
  2a = (30*k + a)/6 ,   0<=k<=11., 0<=a<=30°
   ==> 11a = 30k
   ==> 1)当k=0时,a=0,此时a为整数,时间为0点或24点.秒针正好也为a度即0度.
           2)当k=11时,a=30,此时a为整数.时间为12点,秒针恰好为11点又偏30度指向12点! 3者重合.

最后和面试官面谈时又临时问了两个问题:
1)两个人距离d分别以速率a,b相向而行,中间有一只狗以速率c来回跑,碰到人就掉头.问,两个人遇上时,狗跑了多远?
   c*[d/(a+b)]
2)有5个苹果要3天吃完,每一天可以选择不吃,也可以一次吃完,吃的个数不限.问,有多少种吃法?
    这个题感觉最有难度,当时给出的解法是利用动态规划的递归分治方法(不知道算不算的上是动态规划??呵呵,最近研究动态规划有点上瘾).当时的解法能给出1)吃法的种类2)具体各个不同的吃法.但是,题目仅要求计算要多少种吃法,所以我的方法是比较慢的.正确的解法应该是利用排列组合给出一个推导公式
回来想了好久,都遇上麻烦.今早刚睁开眼想了一下,豁然开朗.思路如下:
pos1  appale1  pos2 appale2 pos2 appale3 pos4 appale4  pos5 appale5 pos6
我们看到,5个苹果的中间及两侧共有6个空位,我们
   1.1)随便取两个不同位置C(6,2),便把苹果链分三段,也就是吧苹果分为三堆.
   1.2)随便取两个一样的位置C(6,1),便也把苹果分为3堆.
   1.3)总吃法 = C(6,2) + C(6,1) = 6*5/2*1 + 6 = 21;

   上面的方法对3天吃完有效,对时间更长的天数吃完就无效了!本质上这是一个组合数学钟 相异元素允许重复排列的组合问题
r个无区别的苹果n天吃完,吃法为:C(n+r-1, r).;