[转]某公司的几道面试题
来源:互联网 发布:谁人知 刘德华 编辑:程序博客网 时间:2024/05/17 07:59
[转]某公司的几道面试题
题1:找出集合{A, B, C, ..., Z}的所有子集。
分析:如果集合为{A,B,C},则所有的子集如下:
A B C
0 0 0 值为0 代表空集
0 0 1 值为1 代表{C}
0 1 0 值为2 代表{B}
0 1 1 值为3 代表{B,C}
1 0 0 值为4 代表{A}
1 0 1 值为5 代表{A,C}
1 1 0 值为6 代表{A,B}
1 1 1 值为7 代表{A,B,C}
能看出点什么规律吧?集合的总数为2 ^ 3 = 8个,子集取其值为1对应的字母的集合。
代码:
void GetAllSubsets(void)
{
char cSet[] = {A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z};
int nSize = sizeof(cSet) / sizeof(cSet[0]);
int nStart = 0;
int nEnd = pow(2, nSize);
int nGuard = nStart;
int nIdxI = 0;
while (nGuard < nEnd)
{
nStart = nGuard;
nIdxI = 0;
while (nIdxI < nSize)
{
if ((nGuard >> 1) & 0x0)
{
printf("%c", cSet[nIdxI]);
}//if
nIdxI++;
}// nIdxI, while
printf("\n");
nGuard = nStart++;
}//nGuard, while
}
题2:有一个无序的整数集合,找出符合下列条件的所有整数:
1、整数值为x,则整数前面的所有数都小于x;
2、整数值为x,则整数后面的所有数都大于x;
要求算法时间复杂度为O(n)。
分析:整数x把集合分成了前后两个子集合,如果前面集合中最大的数值为max,后面集合最小值为min,则上面的这个条件可以转化为下面这个条件:
max < x && x < min
代码:
void GetStableElem(void)
{
int nSet[8] = {2, 1, 3, 7, 5, 6, 10, 13};
int nA[8];
int nB[8];
memset(nA, 2, 8);
memset(nB, 13, 8);
int nIdxI = 0;
int nMin = nSet[0];
for (nIdxI = 1; nIdxI < 8; nIdxI++)
{
nA[nIdxI] = nMin;
if (nSet[nIdxI] < nMin)
{
nMin = nSet[nIdxI];
}//if
}// nIdxI, for
int nMax = nSet[7];
for (nIdxI = 6; -1 < nIdxI; nIdxI--)
{
nB[nIdxI] = nMax;
if (nMax < nSet[nIdxI])
{
nMax = nSet[nIdxI];
}//if
}//nIdxI, for
int nStableElem[8] = {0};
int nIdxJ = 0;
for (nIdxI = 0; nIdxI < 8; nIdxI++)
{
if (nA[nIdxI] < nSet[nIdxI] && nSet[nIdxI] < nB[nIdxI])
{
nStableElem[nIdxJ++] = nIdxI;
}//if
}//nIdxI, for
}
题3:有整数集合A和集合B,二者都是升序排列,请判断B是否是A的子集。要求算法时间复杂度为O(n)。
分析:这道题类似于进行多项式加法运算时,对逐个元素的次数进行比较。
代码:
int nA[5] = {0, 1, 6, 8, 7};
int nB[2] = {1, 6};
bool CheckSubSet(int* nSet, int nSetSize, int* nSubSet, int nSSSize)
{
if (NULL == nSet || NULL == nSubSet || nSetSize <= 0 || nSSSize <= 0)
{
return false;
}//if
if (nSet[nSetSize - 1] <= nSubSet[0] || nSubSet[nSSSize - 1] <= nSet[0])
{
return false;
}//if
int nIdxI = 0;
int nIdxJ = 0;
while (nIdxI < nSize && nIdxJ < nSSSize)
{
if (nSet[nIdxI] == nSubSet[nIdxJ])
{
nIdxI++;
nIdxJ++;
}
else if(nSubSet[nIdxJ] < nSet[nIdxI])
{
nIdxI++;
}
else
{
return false;
}
}//nIdxI, nIdxJ, while
if (nIdxI <= nSize && nIdxJ == nSSSize)
{
return true;
}//nIdxI, nIdxJ, if
return false;
}
题4:有如下代码:
int a = 123;
printf("%s", a);
运算结果是?
分析:当时没做出来,后来用VC2008编译后,程序运行时直接崩溃。请高人给分析下。
题5:一个C程序运行中,如果用malloc申请空间不释放,后果是?
分析:也请各位给分析下。
新一篇 : 【转】ifndef作用
旧一篇 : 【转】ASP.NET(C#...
0
1
浏览数
35
当前评论
全站评论
毛杰文 2011-07-13 18:18
题4试过devcpp,codeblocks,VS2010,全部run-time error
在猜想是不是这个printf语句本身就是非法的?因为a是int类型,而%s要求显示的字符串没有末尾“\0”?
朱玉博Lyle.WPF 2011-07-13 19:25
回复毛杰文@AEUG:= = 我猜的是转换为ASCII
- [转]某公司的几道面试题
- 某公司的几道面试题
- 某公司的一道试题
- 某公司的面试题....
- 某公司的JAVA面试题
- MySQL数据表类型(某公司的面试题)
- BAT某公司的一套面试题
- 某公司的数据仓库考题(转)
- 某公司招聘试题(java)
- 某公司java面试试题~~~
- 某公司面试题
- 某公司面试题
- 某公司面试题
- 某公司 面试题
- 某公司数据库面试题
- 某公司面试题
- 金某公司面试题
- 某公司面试题
- 【React-Native】学习指南
- memcached全面剖析–4. memcached的分布式算法
- HTTP 工作原理
- Qt Quick实现底部导航
- 文本输入框等字数统计【文字可包含中文/英文/符号/标点等】
- [转]某公司的几道面试题
- 阅读程序(5)
- 调整数组顺序使得奇数位于偶数前面
- Spring配置文件中配置property标签的name和ref的区别
- 超有用的Facebook开源软件列表
- 接口和抽象类的异同——加入Java8的特性。
- 【转】ifndef作用
- Restful API
- 二叉树遍历递归算法