第六组

  1.链表和数组的区别在哪里?

  2.编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?

  3.编写实现数组排序的一种算法。说明为什么你会选择用这样的方法?

  4.请编写能直接实现char * strcpy(char * pstrDest,const char * pstrSource)函数功能的代码。

  5.编写反转字符串的程序,要求优化速度、优化空间。

  6.在链表里如何发现循环链接?

  7.给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。

  8.写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码

  9.给出一个函数来输出一个字符串的所有排列。

  10.请编写实现void * malloc(int)内存分配函数功能一样的代码。

  11.给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。

  12.怎样编写一个程序,把一个有序整数数组放到二叉树中?

  13.怎样从顶部开始逐层打印二叉树结点数据?请编程。

  14.怎样把一个链表掉个顺序(也是反序,注意链表的边界条件并考虑空链表)? --

  15.请编写能直接实现int atoi(const char * pstr)函数功能的代码

////////////////////////////////////////////////
//author:tim_wang
////////////////////

  答案

  第一组题答案:

  1)三根绳,第一根点燃两端,第二根点燃一端,第三根不点

  第一根绳烧完(30分钟)后,点燃第二根绳的另一端,第二根绳烧完(45分钟)后,点燃第三根绳子两端,第三根绳烧完(1小时15分)后,计时完成

  2)根据抽屉原理,4个

  3)3升装满;3升-〉5升(全注入);3升装满;3升-〉5升(剩1升);5升倒掉;3升-〉5升(注入1升);3升装满;3升-〉5升;完成(另:可用回溯法编程求解)

  4)问其中一人:另外一个人会说哪一条路是通往诚实国的?回答者所指的那条路必然是通往说谎国的。

  5)12个球:

  第一次:4,4 如果平了:

  那么剩下的球中取3放左边,取3个好球放右边,称:

  如果左边重,那么取两个球称一下,哪个重哪个是次品,平的话第三个重,是次品,轻的话同理

  如果平了,那么剩下一个次品,还可根据需要称出次品比轻或者重

  如果不平:

  那么不妨设左边重右边轻,为了便于说明,将左边4颗称为重球,右边4颗称为轻球,剩下4颗称为好球

  取重球2颗,轻球2颗放在左侧,右侧放3颗好球和一颗轻球

  如果左边重

  称那两颗重球,重的一个次品,平的话右边轻球次品

  如果右边重

  称左边两颗轻球,轻的一个次品

  如果平

  称剩下两颗重球,重的一个次品,平的话剩下那颗轻球次品

  13个球:

  第一次:4,4,如果平了

  剩5颗球用上面的方法仍旧能找出次品,只是不能知道次品是重是轻

  如果不平,同上 

6)

  o o o

  o o o

  o o o

  7)

  23次,因为分针要转24圈,时针才能转1圈,而分针和时针重合两次之间的间隔显然> 1小时,它们有23次重合机会,每次重合中秒针有一次重合机会,所以是23次

  重合时间可以对照手表求出,也可列方程求出

  8)

  在地球表面种树,做一个地球内接的正四面体,内接点即为所求