北京中软面试题

北京中软笔试题

1.不许用中间变量,String ABCDE 倒转

2.10000个数求第2大的数,不许用排序算法.

3.排序算法的测试用例

我的答案:

1.

1. include "stdafx.h"

1. include <iostream>

1. include <string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

 char *ps = new char[15];

 strcpy_s(ps,15,"I am yuchifang");

 cout<<"before reverse:"<<endl;

 cout<<ps<<endl;

 int i = 0;

 int j = 13;

 while(i<j)

 {

 ps[i] = ps[i]+ps[j];

 ps[j] = ps[i]-ps[j];

 ps[i] = ps[i]-ps[j];

 i++;

 j--;

 }

 cout<<"after reverse"<<endl;

 cout<<ps<<endl;

 return 0;

}

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

这是我在中软国际面试的一些题目,看你会吗?

1Java中的属性和字段有什么区别? --这个是当时考我的一道题,我不会啊!!!!!!!!!

Java中的属性,通常可以理解为getset方法。而字段,通常叫做类成员
这两个概念是完全不同的。
属性只局限于类中方法的声明,并不与类中其他成员相关。例如:
void setA(String s){}
String getA(){}
当一个类中拥有这样一对方法时,我们可以说,这个类中拥有一个可读写的a属性(注意是小写a)。如果去掉了set的方法,则是可读属性,反之亦然。
类成员(字段),通常是在类中定义的类成员变量,例如:
public class A{
private String s = "123";
}
我们可以说A类中有一个成员变量叫做s

2C/C++你更熟悉那个?C++中的虚函数用在什么地方?JAVA中的虚函数呢?(我没记得Java中还有这个)

3、你对数据库中存储过程了解多少?说说。

4、假如微软给你500万美元项目经费,你怎么利用它?

5、你对考研是什么态度?

6、你对加班是什么态度? 这个答案项目经理说出来后我感觉太现实了,你猜他怎么说的?和IT人有关的

7Why do you …… ICS&S? (我忘具体怎么说的了,大意就是问你为何要来中软国际?人家可是用全英语问的,说的挺快的,幸好我听懂一点)
  问题太多了,大多是技术问题,不过都和知识要点有关,不考太难的太复杂的,不过我还是大部分不会啊!!!英语会让你就自己喜欢的方向作简介呢。难,要我说就完了。

  先想出这多了,下次再写,技术问题好多,有空把笔试题给大家看看,唉!

题目为写算法生成随机4位数,要求每位数字不同.

Solution:

有个隐含条件,即第一个数字不能为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;

}

  我相信会编程的人都会写出这个算法. 基本上是很普通的.这个算法有个不愉快的地方就是hold point那块,成功率为100%(第一次),90%(第二次),80%(第三次),70%(第四次),越来越低,不过只要不低于50%,程序效率还不会打折扣.
以下是我的第二种写法,用空间换了点时间,C++语言写的:

1. include <iostream>

1. include <stdlib.h>

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<<r4.Next()<<endl;

 cout<<r4.Next()<<endl;

 cout<<r4.Next()<<endl;

 system("PAUSE");

 return 0;

}


此法的时间复杂度为正宗的O(n),空间开销(不包含调用库函数的)就比前一个例子多了些.

此法在nm的随机计算中,m0一直到趋近于n, 效率都是不变的.

其他的高效方法暂时还没有想出.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值