1.不許用中間變量,把String ABCDE 倒轉(zhuǎn)
2.10000個(gè)數(shù)求第2大的數(shù),不許用排序算法.
3.排序算法的測(cè)試用例
我的答案:
1.
1. include "stdafx.h"
1. include
1. include
using namespace std;
int _tmain(int argc, _TCHAR argv[])
{
char ps = new char[15];
strcpy_s(ps,15,"I am yuchifang");
cout<<"before reverse:"<
cout<
int i = 0;
int j = 13;
while(i
{
ps[i] = ps[i]+ps[j];
ps[j] = ps[i]-ps[j];
ps[i] = ps[i]-ps[j];
i++;
j--;
}
cout<<"after reverse"<
cout<
return 0;
}
這是我在中軟國(guó)際面試的一些題目,看你會(huì)嗎?
1、Java中的屬性和字段有什么區(qū)別? --這個(gè)是當(dāng)時(shí)考我的一道題,我不會(huì)啊!!!!!!!!!
2、C/C++你更熟悉那個(gè)?C++中的虛函數(shù)用在什么地方?JAVA中的虛函數(shù)呢?(我沒(méi)記得Java中還有這個(gè))
3、你對(duì)數(shù)據(jù)庫(kù)中存儲(chǔ)過(guò)程了解多少?說(shuō)說(shuō)。
4、假如微軟給你500萬(wàn)美元項(xiàng)目經(jīng)費(fèi),你怎么利用它?
5、你對(duì)考研是什么態(tài)度?
6、你對(duì)加班是什么態(tài)度? 這個(gè)答案項(xiàng)目經(jīng)理說(shuō)出來(lái)后我感覺(jué)太現(xiàn)實(shí)了,你猜他怎么說(shuō)的?和IT人有關(guān)的
7、Why do you …… ICS&S? (我忘具體怎么說(shuō)的了,大意就是問(wèn)你為何要來(lái)中軟國(guó)際?人家可是用全英語(yǔ)問(wèn)的,說(shuō)的挺快的,幸好我聽(tīng)懂一點(diǎn))
問(wèn)題太多了,大多是技術(shù)問(wèn)題,不過(guò)都和知識(shí)要點(diǎn)有關(guān),不考太難的太復(fù)雜的,不過(guò)我還是大部分不會(huì)啊!!!英語(yǔ)會(huì)讓你就自己喜歡的方向作簡(jiǎn)介呢。難,要我說(shuō)就完了。
先想出這多了,下次再寫,技術(shù)問(wèn)題好多,有空把筆試題給大家看看,唉!
、、、、、、、、、、、、、、、、、、、、、、
題目為寫算法生成隨機(jī)4位數(shù),要求每位數(shù)字不同.
Solution:
有個(gè)隱含條件,即第一個(gè)數(shù)字不能為0. 以下是我初步的javascript解法:
function rand4(){
var arr = new Array();
var index = 0;
var tempNum;
while(index<4){
tempNum = Math.round(Math.random()9);
if(!(index==0 && tempNum==0)){
//hold point
if(arr[tempNum]== null){
arr[tempNum] = tempNum;
++index;
}
}
}
var ret = 0;
for(var i in arr){
if (ret != 0){
ret = 10;
}
ret += parseInt(i);
} alert(ret);
return ret;
}
我相信會(huì)編程的人都會(huì)寫出這個(gè)算法. 基本上是很普通的.這個(gè)算法有個(gè)不愉快的地方就是hold point那塊,成功率為100%(第一次),90%(第二次),80%(第三次),70%(第四次),越來(lái)越低,不過(guò)只要不低于50%,程序效率還不會(huì)打折扣.
以下是我的第二種寫法,用空間換了點(diǎn)時(shí)間,用C++語(yǔ)言寫的:
1. include
1. include
using namespace std;
class Rand4{
private:
int a[10];
int getNum(int index){
while(a[index]==-1){
++index;
index %= 10;
}
int ret = a[index];
a[index] = -1;
return ret;
};
void init(){
for(int i=0;i<10;++i){
a[i] = i;
}
};
public:
int Next(){
init();
int ret = (rand()%10) 1000;
int index = 100;
int time = 3;
while(time>0){
ret += getNum((rand()%10))index;
index /= 10;
--time;
}
return ret;
};
};
int main(int argc, char argv[])
{
Rand4 r4;
cout<
cout<
cout<
system("PAUSE");
return 0;
}
此法的時(shí)間復(fù)雜度為正宗的O(n),空間開(kāi)銷(不包含調(diào)用庫(kù)函數(shù)的)就比前一個(gè)例子多了些.
此法在n取m的隨機(jī)計(jì)算中,m從0一直到趨近于n, 效率都是不變的.
其他的高效方法暫時(shí)還沒(méi)有想出.