MSRA相关考题

来源:互联网 发布:启动项有windows boot 编辑:程序博客网 时间:2024/04/29 20:45

MSRA相关考题

在网上找到了MSRA相关考题,大多是没有答案的,偶给整理一下,给出偶的答案,要是有错误,希望与我交流。

1.打印"Welcome MSR Asia"

#include

#include

char * GetName (void)

{

//To return "MSR Asia" String

char name[]="MSR Asia";

return name;

}

void main(int argc, char* argv[])

{

char name[32];

//Fill in zeros into name

for(int i=0;i<=32;i++)

{

name[i]=''/0'';

}

//copy "Welcome" to name

name="Welcome";

//Append a blank char

name[8]='''';

//Append string to name

strcat(name,GetName());

//print out

printf(name);

}

找出程序中的错误。

Solved By Super.Jiju

1. 在char * GetName (void)中,char name[]="MSR Asia”; return name;错误在于 name是在栈上面申请内存的,return name的效果是return 栈内存地址的一个copy,当函数调用结束后,name所拥有的内存被释放,如果想通过返回指向该数组的指针,应该用new/malloc申请内存。

2. 在main函数里,name[32]在for循环赋值的时候会越界。name[i]=’/0’,如果将字符串复制进数组,应该用strcpy,追加应该用strcat

3. 定义指针指向GetName(),并释放内存。

修改后程序如下:

#include

#include

#include

char * GetName (void)

{

//To return "MSR Asia" String

char *name=(char *)malloc(strlen("MSR Asia")+1);

strcpy(name,"MSR Asia");

return name;

}

void main(int argc, char* argv[])

{

char name[32];

//Fill in zeros into name

for(int i=0;i<32;i++)

{

name[i]='/0';

}

//copy “Welcome”to name

//name="Welcome";

strcat(name,"Welcome ");

/*Append a blank char

name[8]=' ';

Append string to name*/

char *p=GetName();

strcat(name,p);

//print out

printf(name);

free(p);

}

2. 将空格为分隔符的字符串逆序打印,但每个token不逆序。例如 "Hello world I am william",那么打印出的结果为"william am I world Hello"

C++实现如下:用c语言实现思想类似,查找空格,strcat

#include

#include

using namespace std;

string Inverse(string str)

{

string str1;//return str;

size_t pos1=0,pos2=str.length();

while((pos1=str.find_last_of(" ",pos2))

{

str1+=str.substr(pos1+1,pos2-pos1);

str1+=" ";

pos2=pos1-1;

}

str1+=str.substr(0,str.find_first_of(" "));

return str1;

}

int main()

{

string str;

getline(cin,str);

cout<

system("pause");

return 0;

}

问题:编写atoi,即将字符串转为整型。

参考了被人的代码,佩服:

#include

#include

using namespace std;

int myatoi(string str)

{

int i;

int val;

for ( i = 0; isspace(str[i]); i++) ;//第i位的为str第一个非空位

int sign = (str[i] == '-') ? -1 : 1; //判断首位符合

if('-' == str[i] || '+' == str[i]) i++;

for(val = 0; str[i] != '/0';i++)

{

if( isspace(str[i])) continue;

if(isdigit(str[i]))

{

val = str[i]-'0' + 10*val; //str[i]-'0'即str[i]与'0'位置差

}

}

return val * sign;

}

void main()

{

string str;

getline(cin,str);

cout<

system("pause");

}

1写出下列算法的时间复杂度。
(1)冒泡排序;

(2)选择排序;

(3)插入排序;

(4)快速排序;

(5)堆排序;

(6)归并排序;

123-> O(n^2),456->O(n*log(n))

写出下列程序在X86上的运行结果。

struct mybitfields

{

unsigned short a : 4;

unsigned short b : 5;

unsigned short c : 7;

}test ;

void main(void)

{

int i;

test.a=2;

test.b=3;

test.c=0;

i=*((short *)&test);

printf("%d/n",i);

}

http://super-jiju.spaces.live.com/blog/cns!806C498DDEE76B61!315.entry

里面有相关位域的介绍。

0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0

从右到左依次给a,b,c分配4 5 7个位,short占两个字节,共16位,那么赋值后,结构体内应如上图所示,按照short型读取信息,所以应该输出50(110010);由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位。即本题中不能超过16位。

写出下列程序的运行结果。

unsigned int i=3;

cout<

这里面i占了32位,unsigned int的取值范围是0-2^32-1;所以-3用unsigned int表示即为2^32+2;

写出下列程序所有可能的运行结果。

int a;

int b;

int c;

void F1()

{

b=a*2;

a=b;

}

void F2()

{

c=a+1;

a=c;

}

void main()

{

a=5;

//Start F1,F2 in parallel

F1(); F2();

printf("a=%d/n",a);

system("pause");

}

--à5*2+1

对 16 Bits colors的处理,要求:

(1)Byte转换为RGB时,保留高5、6bits;

(2)RGB转换为Byte时,第2、3位置零。

不会

一个链表的操作,注意代码的健壮和安全性。要求:

(1)增加一个元素;

(2)获得头元素;

(3)弹出头元素(获得值并删除)。

仅供参考:

#include

using namespace std;

template

class LisT;

template

class Node

{

friend class LisT;

private:

T data;

Node *link;

public:

Node():link(NULL){};

Node(const T x):data(x),link(NULL){};

};

template

class LisT

{

private:

Node *first,*last;

public:

LisT():first(NULL),last(NULL){};

LisT(const T x);

bool Insert(const T x,const int pos);

T Top(void);

T Pop(void);

};

template

LisT::LisT(const T x)

{

first=last=NULL;

Insert(x,0);

}

template

bool LisT::Insert(const T x, const int pos)

{

Node *p=first;

int k=0;

while(p && klink;k++;}

if(!p && first )

{

cout<<"Invalid postion for Insertation"<

return 0;

}

Node* newnode=new Node(x);

if(!first || pos==0)

{

newnode->link=first;

if(!first) last=newnode;

first=newnode;

}

else

{

newnode->link=p->link;

if(!p->link) last=newnode;

p->link=newnode;

}

return 1;

}

template

T LisT::Top()

{

Node *p=first;

if(first)

return p->data;

else

{

cout<<"List is EMPTY"<

return 0;

}

}

template

T LisT::Pop()

{

Node *p=first;

if(first)

{

T x=p->data;

first=p->link;

delete p;

return x;

}

else

{

cout<<"List is Empty"<

return 0;

}

}

int main()

{

LisT mlist;

for(int i=0;i<10;++i)

{

mlist.Insert(i,0);

}

for(int i=1;i<6;++i)

{

cout<

}

cout<

system("pause");

return 0;

}

一个给定的数值由左边开始升位到右边第N位,如

0010<<1 == 0100

或者

0001 0011<<4 == 0011 0000

请用C或者C++ 或者其他X86上能运行的程序实现。

不是十分理解题意 JJLKK

#include

#include

using namespace std;

string tran(string str,int n)

{

string temp="";

size_t pos=0,len=str.length();

for(pos=n;pos

{

if(isdigit(str[pos])) temp+=str[pos];

}

temp+=string(n,'0');

return temp;

}

int main()

{

string str;

int n;

cout<<"Input the number"<

getline(cin,str);

cout<<"Input n"<

cin>>n;

str=tran(str,n);

size_t len=str.length();

for(size_t i=0;i

{

cout<

if((i+1)%4==0) cout<<" ";

}

cout<

system("pause");

return 0;

}

In C++ , what does "explicit" mean? what does "protected" mean?

问Calc(9999)的值是多少。

int Calc(unsigned int x)

{

int count=0;

 while(x)

 {

printf("x=%i/n",x);

count++;

x=x&(x-1);

}

 return count;

}

如果x非零,那么就让x&(x-1),函数的功能是将某十进制数转换为二进制后,其中数字1的个数。x=9999->9998->9996->9992->9984->9728->9216->8192,其中8192是2^13.

10000000000000&0111111111111=0;

可以参考:http://www.msra.cn/Articles/ArticleItem.aspx?Guid=7cfc244e-aaf5-4669-be0a-3a8f32409731

为什么返回局部变量的引用不好?

A:局部变量由系统自动分配在栈上,自动管理回收。如果返回引用,可以造成数据丢失。

Stack R,from the top to bottom:{2,3,4,5,6},逐个取出放入Queue Q ,再从Q中逐个取出放入R中,问现在从上到下R中元素的排列?

A:逆序。

一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,(多了就被压死了),它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里。 提示:他可以把香蕉放下往返的走,但是必须保证它每走一米都能有香蕉吃。也可以走到n米时,放下一些香蕉,拿着n根香蕉走回去重新搬50根。

A:从最后一步开始,小猴子最多可以携带50个香蕉走完最后一段路程,并且这是最有情况。那么小猴子在搬橡胶的前面过程中,要消耗50个香蕉。前面共有50个香蕉够它消耗。

本来还有很多题目,懒得继续做下去了,附上来吧。

1。好多正方体的小木块,大小相同,每一面都是用同一种颜料涂的要么是红的要么是兰的

问,最少取出多少块可以保证2快所有相对应面的颜色一样,(可以旋转到所有面一样的)

2。1024个灯 第一次从左往右开1,3,5。。。。到了那一头再返回来开1024 1020。。。这样来回 最后是哪一个灯被开了

3。一个篮球在上面画黑点,要求所有黑点之间的连线(在球面上的)相同最多有几个点

n=4,正四面体的四个顶点。

4体育彩票1-100(100个自然数),选取10个数作为你的彩票,开奖的时候工作人员从1-100中间取出10个,只要你的10个数字在其余的90个数字内就算中将,问中奖的得机会??还是最少几张就可以中将?

5有如下几张牌

黑J 8 4 2 7 3

红A Q 4

草K Q 5 4 6

方A 5

你取出一张牌把数字告诉A吧花色告诉B

A:我不知道我的是哪一张牌 B:我知道你不知道!过了一会儿A:我知道了!

B:我也知道了!问是哪一张牌 为什么?

1、U2合唱团在17分钟内得赶到演唱会场,途中必需跨过一座桥,四个人从桥的同一 端出发,你得帮助他们到达另一端,天色很暗,而他们只有一只手电筒。一次同时最多可以有两人一起过桥,而过桥的时候必须持有手电筒,所以就得有人把手电筒带来带去,来回桥两端。手电筒是不能用丢的方式来传递的。 四个人的步行速度各不同,若两人同行则以较慢者的速度为准。 Bono需花1分钟过桥 Edge需花2分钟过桥 Adam需花5分钟过桥 Larry需花10分钟过桥 他们要如何在17分钟内过桥呢?(这是Micrsoft征聘人员时问的问题,你必须在五分钟内答出来才可能获得聘用。

B+E B A+L E B+E

2、10个红球,10个白球,两个相同的包,如何放置才能使任意从一包中拿一个球是

红球的可能性最高?是多少?

3、三层、四层二叉树有多少种?

1。前两层是满树,第三层最多4个节点,每个节点都可能是空,也可能不是空。但是不能完全是空,所以有2^4-1种

2。前两层不是满树,即第2层只有一个节点。同上得到2^2-1种,因为第2层少那一个不一定,所以*2三层:2^4-1 2*(2^2-1)

3。以上两种情况覆盖所有3层2叉树

4。4层类似考虑。根节点至少有一个子树是3层树,另一个子树可以是3层,2层,1层,空所以设3层有x种情况,2层有y种情况(y=3),1层有z种情况(z=1),0层有1种情况,那么就有:当做子树为3层,有x*(x y z 1)种情况,同理右子树也是一样,但是有重复计算,

即左右子树都是3层的时候,所以总的情况应该是2*(x*(x y z 1))-x*x

?、

1——100000数列按一定顺序排列,有一个数字排错,如何纠错?写出最好方法。两个数字呢?一个数字错就顺序扫描,相邻元素比较,1和2比较,3和4比较。。。直到发现出错元素,把它插入合适的位置两个出错则两步,第一步同上,找到2个不合顺序的对就把这两个插入合适位置,就至少纠正了一个错。再扫描一遍,则可以完全纠正。如果第一步没有发现错误顺序,就证明是

出错的两个相邻,是一对,则2和3结合,4和5...

#include

#include

int FindSubString(char* pch)

{

int count=0;

char* p1=pch;

while(*p1!=''/0'')

{

if(*p1==p1[1]-1)

{

p1 ;

count ;

}

else

{

break;

}

}

int count2=count;

while(*p1!=''/0'')

{

if(*p1!==p1[1] 1)

{

p1 ;

count2--;

}

else

{

break;

}

if(count2==0)

{return count;

return 0;

}

void ModifyString(char* pText)

{

char* p1=pText;

char* p2=p1;

while(*p1!=''/0'')

{

int count=FindSubString(p1);

if(count>0)

{

*p2 =*p1;

sprintf(p2,"%i",count);

while(*p2!=''/0'')

{

p2 ;

}

p1 =count count 1;

}

else

{

*p2 =*p1 ;

}

}

void main(void)

{

char text[32]="XYBCDCBABABA";

ModifyString(text);

printf(text);

}

In the main() function, after ModifyString(text) is called, what''s the value

of ''text''?

Algorithms

* What''s the difference between a linked list and an array?

* Implement an algorithm to sort a linked list. Why did you pick the method you did?

* Implement an algorithm to sort an array. Why did you pick the method you did?

* Implement strstr() (or some other string library function).

* Reverse a string. Optimize for speed. Optimize for space.

* Count the number of set bits in a number. Now optimize for speed. Now optimize for size.

* How would you find a cycle in a linked list?

* Give me an algorithm to shuffle a deck of cards, given that the cards are stored in an array of ints.

* Write a function that takes in a string parameter and checks to see whether or not it is an integer, and if it is then return the integer value.

* Write a function to print all of the permutations of a string.

* Implement malloc.

* Write a function to print the Fibonacci numbers.

* Write a function to copy two strings, A and B. The last few bytes of string A overlap the first few bytes of string B.

* How would you print out the data in a binary tree, level by level,

starting at the top?

Applications

* How can computer technology be integrated in an elevator system for a

hundred story office building?

How do you optimize for availability? How would variation of traffic over

a typical work week or floor or time of day affect this?

* How would you redesign an ATM?

* Suppose we wanted to run a microwave oven from the computer. What kind of

software would you write to do this?

* How would you design a coffee-machine for an automobile.

Thinkers

* How are M&Ms made?

* If you had to learn a new computer language, how would you go about doing

it?

* If MS told you we were willing to invest $5 million in a start up of your

choice, what business would you start? Why?

* If you could gather all of the computer manufacturers in the world

together into one room and then tell them one thing that they wouled be compelled to do,what would it be?

* Explain a scenario for testing a salt shaker.

* If you are going to receive an award in 5 years, what is it for and who

is the audience?

* How would you explain how to use Microsoft Excel to your grandma?

* Why is it that when you turn on the hot water in any hotel, for example,

the hot water comes pouring out almost instantaneously?

#include

class A

{

public:

void FuncA()

{

printf("FuncA called/n");

}

virtual void FuncB()

{

printf("FuncB called/n");

}

};

class B: public A

{

public:

void FuncA()

{

A::FuncA();

printf("FuncAB called/n");

}

virtual void FuncB()

{

printf("FuncBB called/n");

}

};

void main(void)

{

B b;

A *pa;

pa=&b;

A *pa2=new A;

b.FuncA();

b.FuncB();

pa->FuncA();

pa->FuncB();

pa2->FuncA();

pa2->FuncB();

delete pa2;

}

What is the output of the above program?

#include

#include

class CBuffer

{

char * m_pBuffer;

int m_size;

publc:

CBuffer()

{

m_pBuffer=NULL;

}

~CBuffer()

{

Free();

}

void Allocte(int size)

{

m_size=size;

m_pBuffer= new char[size];

}

private:

void Free()

{

if(m_pBuffer!=NULL)

{

delete m_pBuffer;

m_pBuffer=NULL;

}

}

public:

void SaveString(const char* pText) const

{

strcpy(m_pBuffer, pText);

char* GetBuffer() const

{

return m_pBuffer;

}

};

void main (int argc, char* argv[])

{

cBuffer buffer1;

buffer1.SaveString("Microsoft");

printf(buffer1.GetBuffer());

}

找出Allocate, SaveString, main的错误。

一.最基本题型(说明:此类题型比较简单)

1. 1到100有多少个9

2. 连续整数之和为1000的共有几组

3. U2合唱团在17分钟内得赶到演唱会场,途中必需跨过一座桥,四个人从桥的

同一端出发,你得帮助他们到达另一端,天色很暗,而他们只有一只手电筒。

一次同时最多可以有两人一起过桥,而过桥的时候必须持有手电筒,所以就

得有人把手电筒带来带去,来回桥两端。手电筒是不能用丢的方式来传递的。

四个人的步行速度各不同,若两人同行则以较慢者的速度为准。 Bono需花1

分钟过桥 Edge需花2分钟过桥 Adam需花5分钟过桥 Larry需花10分钟过桥

他们要如何在17分钟内过桥呢?(这是Micrsoft征聘人员时问的问题,你必须

在五分钟内答出来才可能获得聘用)。

4. 说有一份遗产3500元一个女人的老公留下来的,如果这个女人生的是儿子那么她将分到她儿子的一半,如果是女儿,他将分得她女儿的2倍,如果这个女人生了一对,一男一女,问各得多少遗产?

5. 老师d的物理测验答案在教室里丢失了,今天那个教室上了5堂课,老师d上了3

堂,有可能是a、b、c三个同学盗窃

已知: 1、a上了两堂课

2、b上了三堂课

3、c上了四堂课

4、a、b、c每个人都上了老师d的两堂课

5、五堂课中,三个人到堂的组合各不相同

6、老师d的课中有一堂,三个人中到了两个,事后证明不是那两个人偷得

问?是谁偷得

6. a b c d e

* f

__________________

=g g g g g g

问,a b c d e f g各是什么数字(不重复)

7. a进行一次C和D之间往返旅行,希望在整个旅行中能够达到60km/h的平均速度,但是当他从C到达D的时候发现平均速度只有30km/h,问a应当怎么做才能够使这次往返旅行的平局速度到达60km/h

8. 烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?

9. 你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻?

10. 如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?

11. 一个岔路口分别通向诚实国和说谎国。来了两个人,已知一个是诚实国的,另一个是说谎国的。诚实国永远说实话,说谎国永远说谎话。现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。请问应该怎么问?

12. 12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个呢?

13.在9个点上画10条直线,要求每条直线上至少有三个点?

14.在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次?都分别是什么时间?你怎样算出来的?

二.没有答案型(说明:这些题显然不是考你智力。而考的是你的反应能力。 这种题大多数没有答案,但是要看你的反应喽!)

1.为什么下水道的盖子是圆的?

2.中国有多少辆汽车?

3.将汽车钥匙插入车门,向哪个方向旋转就可以打开车锁?

4.如果你要去掉中国的34个省(含自治区、直辖市和港澳特区及台湾省)中的任何一个,你会去掉哪一个,为什么?

5.多少个加油站才能满足中国的所有汽车?

6.想象你站在镜子前,请问,为什么镜子中的影象可以颠倒左右,却不能颠倒上下?

7.为什么在任何旅馆里,你打开热水,热水都会瞬间倾泻而出?

8.你怎样将Excel的用法解释给你的奶奶听?

9.你怎样重新改进和设计一个ATM银行自动取款机?

10.如果你不得不重新学习一种新的计算机语言,你打算怎样着手来开始?

11.如果你的生涯规划中打算在5年内受到奖励,那获取该项奖励的动机是什么?

12.如果微软告诉你,我们打算投资五百万美元来启动你的投资计划,你将开始什么样商业计划?为什么?

13.如果你能够将全世界的电脑厂商集合在一个办公室里,然后告诉他们将被强迫做一件事,那件事将是什么?

三.难题(说明:这类题有一定难度,如果得不到答案,也不能说明什么。 如果你想到了解题思路,那么答案马上就能出来。如果想不到思路, 那么......就别想解出来了。)

1.你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断,你如何给你的工人付费?

2.有一辆火车以每小时15公里的速度离开北京直奔广州,同时另一辆火车每小时20公里的速度从广州开往北京。如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从北京出发,碰到另一辆车后就向相反的方向返回去飞,就这样依次在两辆火车之间来回地飞,直到两辆火车相遇。请问,这只鸟共飞行了多长的距离?

3.你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的药丸的重量+1。只称量一次,如何判断哪个罐子的药被污染了?

4.门外三个开关分别对应室内三盏灯,线路良好,在门外控制开关时候不能看到室内灯的情况,现在只允许进门一次,确定开关和灯的对应关系?

5.人民币为什么只有1、2、5、10的面值?

6.你有两个罐子以及50个红色弹球和50个蓝色弹球,随机选出一个罐子,随机选出一个弹球放入罐子,怎么给出红色弹球最大的选中机会?在你的计划里,得到红球的几率是多少?

四.超难题(说明:如果你是第一次看到这种题,并且以前从来没有见过类似的题型,并且能够在半个小时之内做出答案。只能说明你的智力超常......)

第一题 五个海盗抢到了100颗宝石,每一颗都一样大小和价值连城。

他们决定这么分:

抽签决定自己的号码(1、2、3、4、5)

首先,由1号提出分配方案,然后大家表决,当且仅当超过半数的人同意时,按照他的方案进行分配,否则将被扔进大海喂鲨鱼如果1号死后,再由2号提出分配方案,然后剩下的4人进行表决,当且仅当超过半数的人同意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼

依此类推

条件:每个海盗都是很聪明的人,都能很理智地做出判断,从而做出选择。

问题:第一个海盗提出怎样的分配方案才能使自己的收益最大化?

第二题 . 一道关于飞机加油的问题,已知:

每个飞机只有一个油箱,飞机之间可以相互加油(注意是相互,没有加油机) 一箱油可供一架飞机绕地球飞半圈,问题: 为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?

(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)

五.主观题(说明:在以后的工作过程中,我们可定会犯这样那样的错误。 既然错误已经酿成,损失在所难免,我们只能想办法把损失减少到最小。 如果能巧妙地回答出这些问题,再发生错误的情况下。能让客户有最少的抱怨,公司有最少的损失。)

1.某手机厂家由于设计失误,有可能造成电池寿命比原来设计的寿命短一半 (不是冲放电时间),解决方案就是免费更换电池或给50元购买该厂家新手机 的折换券。请给所有已购买的用户写信告诉解决方案。

2.一高层领导在参观某博物馆时,向博物馆馆员小王要了一块明代的城砖作 为纪念,按国家规定,任何人不得将博物馆收藏品变为私有。博物馆馆长需要如何写信给这位领导,将城砖取回。

3.营业员小姐由于工作失误,将2万元的笔记本电脑以1.2万元错卖给李先生,王小姐的经理怎么写信给李先生试图将钱要回来?

5.

18.一道智力题或者说逻辑题,好多英文单词不认识,都没弄懂意思,所以也没做。有记得的写出来吧,最好翻译过来,我还打算做一下呢。虽然很有可能做不出。

有一道好像是说编译器可以修改type error,的好处或不好。

有一道是什么regular language和 text free language比较?(有没有人给我解释一下这两个是什么东东?)

有一道是在编写代码是查找错误好还是用testing找好?

其他的都不记得了。

Part II 编程(40分钟)

1. 把一段汇编语言的程序写成一个C语言函数,不能有go to 和指针。因为那段汇编我没看懂,所以也记不得了。那个汇编是我们微原学的汇编,是另一个,不过它有解释关于它的语句命令。

2.实现以下程序,以方便binary search.

.要有处理错误语句

.队列的分配的大小是固定的MAX_LEN,由第二个参数输入

.不能复制队列

insert (int *arr, //队列

size_l len, // 队列大小

size_l count, //队列元素的数目

int varl //要处理的数据

)返回插入数据的索引

remove(int *arr,size_l len,size_l count,int varl)返回删除元素的索引

search(int *arr,size_l len,size_l count,int varl)返回搜索道元素的索引

Part III Design(20分钟)

1.如果给你分配一个任务,做一个新版本的IE浏览器的一个功能,可能是搜索功能、用户界面,你将如何design,development,test

2.不记得

Part IV Testing(30分钟)

1。给你一个函数,你如何测试它,函数是strcmp(char* str1,char* str2)

2.给你一个DVD Play,你如何测试它?如果测有只有一定的时间,你首先测试哪一步?为什么?

Part V. Writing(20分钟)

在过去的这些年,你遇到了哪一个最大的困难,你是如何解决它的?你是单独做的还是和别人一起做的决定?为什么做这个决定?现在the output如何?

5 回复 :微软笔试面试题集锦

1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?

答:先取三根绳子(A,B,C),同时点燃A的两端和B的一端,当A烧完后,熄灭B并点燃C的两端.等C烧完再点燃B的两端.

2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻?

答:4个

3.如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?(40秒-3分钟)

答:灌满5公升的桶后,再将水倒满3公升的桶,再将3公升的桶清空,将剩下的2公升水倒如3公升桶,再灌满5公升的桶, 将水倒如3公升的桶, 当3公升桶满时,5公升中剩下的是4公升水.

4.一个岔路口分别通向诚实国和说谎国。来了两个人,已知一个是诚实国的,另一个是说谎国的。诚实国永远说实话,说谎国永远说谎话。现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。请问应该怎么问?(20秒-2分钟)

答: (是不是只许问每人一个问题啊, 如果是答案就是这样)

先问第一个: "对不起, 不好意思, 拜托了, 请问这两条路是不是去不同地方的?"

再问第二个:"狗卵! 哪条路是去说谎国的?"

如果,一答:YES 那么按照二指出的另一条路走;

如果,一答:NO 那么按照二指的路走就是了.

5.12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)(5分钟-1小时)

答:先分A,B,C三组,每组四个. 每组编号为A1,A2,A3,A4;B1,B2,B3,B4;C1,C2,C3,C4;

第一次:称A,B两组:IF A==B; 则C为异常组,第二次取A或B组中任意三球与C1,C2,C3称:

IF C1+C2+C3==A1+A2+A3 ;第三次称C4与A1:IF C4>A1,则C4是重球;else C4是轻球

IF C1+C2+C3>A1+A2+A3;第三次称C1与C2:IF C1==C2,C3是重球;IF C1>C2,C1是重球

else,C2是重球

IF C1+C2+C3C2,C2是轻球

else,C1是轻球

如果第一次:A>B;则C是标准组, 第二次取A1,A2,B1与A3,B2,C1称,

IF A1+A2+B1==A3+B2+C1;第三次称B3与B4;IF B3==B4,则A4是重球;IF B3>B4,则B4是轻球;ELSE B3是轻球;

IF A1+A2+B1>A3+B2+C1;第三次称A1与A2:IF A1==A2,则B2是轻球;IF A1>A2,则A1是重球,ELSE A2是重球;

IF A1+A2+B1C1这种情况.

如果第一次:A

13个球的话,第二次称时用三重一轻与一重一轻两个标准球对称.

7.在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次?都分别是什么时间?你怎样算出来的?(5分钟-15分钟)

答:25次.0时0分0秒,1时五分五秒,2时10分十秒.以此类推~~

1.你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断,你如何给你的工人付费?

答:分成1/7一块,2/7一块,4/7一块;第一天给工人1/7那块,第二天给他2/7那块,他找你1/7块~~~~以次类推.

2.有一辆火车以每小时15公里的速度离开北京直奔广州,同时另一辆火车每小时20公里的速度从广州开往北京。如果有一只鸟,以30公里每小时的 速度和两辆火车同时启动,从北京出发,碰到另一辆车后就向相反的方向返回去飞,就这样依次在两辆火车之间来回地飞,直到两辆火车相遇。请问,这只鸟共飞行 了多长的距离?

答: 也就是说在那两辆火车相遇之前那只傻鸟是飞个不停的,如果设北京到广州是N公里, 则 (N/15+20)*30,也就是说那鸟飞了6/7倍北京到广州的距离.

3.你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的药丸的重量+1。只称量一次,如何判断哪个罐子的药被污染了?

答:取第一个罐子的一个药丸加上第二个罐子的两个药丸与第三个罐子的三个药丸对称,如果天平水平则被污染的是四号药罐,如果天平倾斜了三格则是第三号药罐,如倾斜了两格则是两号,ELSE 一号. (也许哦)

4.门外三个开关分别对应室内三盏灯,线路良好,在门外控制开关时候不能看到室内灯的情况,现在只允许进门一次,确定开关和灯的对应关系?

答:

可以这样: 把一个灯开一段时间后, 再打开第二个灯, 进门,用手摸一下,很烫的那个对应第一次开的,不烫的对应第二次开的,不亮的对应第三个.

5.人民币为什么只有1、2、5、10的面值?

答:因为这是能够组合成100以内任何数的最小张数

6.你有两个罐子以及50个红色弹球和50个蓝色弹球,随机选出一个罐子, 随机选出一个弹球放入罐子,怎么给出红色弹球最大的选中机会?在你的计划里,得到红球的几率是多少?

答:我的方案是:所有蓝球先装罐,再随机取没有装罐的球,得到红球的几率是100%!!!(哈哈是不是疯了~)

同时起飞三架,到1/8的地方时一架把油给另外两架加满,自己刚好够返程,到达1/4处时一架把油给另一架加满,自己也是刚好返程.最后一架飞机 飞总路程的1/2,到达3/4处时派一架飞机去接,平分油料,飞到7/8处时油耗尽,派另一架去接,平分油料,刚好飞完余下的路程.所以一共起飞5架次.

原创粉丝点击