都是大题,有些智力题,基本是都挺基础的
1 n条直线最多将平面分成多少个区域
记得初中还是小学就有这种提了
1条 分2个
2条 4
3 7
4 11
规律 f(n) = n+f(n-1)
再累加起来就是f(n)= (1+n)*n/2 +1
2 翻硬币
有100个硬币,开始正面朝下,第一次把所有的都变向,第二次把2的倍数变向,第三次3的倍数,以此类推,进行100,问朝上的有多少个
和开关灯的那个题是一样的,就是考察一个数有多少个因子,这里就是找因子个数为奇数,为奇数时才会正面朝上,只有完全平方数才有奇数个因子,于是只有十个
和质因子没什么关系。
3 给出两个数的异或与和两个值能否唯一确定那两个数是多少
因为异或与和中两个操作数都满足交换律,举个最简单的例子,一个是0,一个是1,异或等于1,和也等于1,这样无法确定哪个是0,哪个是1
4 给出二叉树的后续遍历和中序遍历求先序 比较简单
5 若干个字符求全排列 ,字符中可能有重复
用递归就可以,只是在交换字母是判断是否两个字符相同,同则跳过
#include<iostream>
using namespace std;
#include<assert.h>
void Permutation(char* pStr, char* pBegin)
{
assert(pStr && pBegin);
if(*pBegin == '\0')
printf("%s\n",pStr);
else
{
for(char* pCh = pBegin; *pCh != '\0'; pCh++)
{ if(*pBegin == *pCh) continue;//如果相同则不交换,进行下一轮交换
swap(*pBegin,*pCh);
Permutation(pStr, pBegin+1);
swap(*pBegin,*pCh);
}
}
}
6 括号匹配问题,还要求把注释中的,光考虑注释了,字符串忘了
http://blog.youkuaiyun.com/zhaopeng2511/article/details/6740479
只有括号匹配,没有去掉注释、字符串中的
我的做法是设置标志位,如果出现注释标志/*,设置标志位为true也就是里边的括号不要统计,当出现 */标志位为false继续统计,引号也类似,只是可能出现转义的情况,在引号中,如果出现/"这样的组合忽略,操作起来也不是很复杂。