发布于 2014-09-25 06:40:01 | 254 次阅读 | 评论: 0 | 来源: 网友投递
Sogou 搜狗
搜狗是搜狐公司的旗下子公司,于2004年8月3日推出,目的是增强搜狐网的搜索技能,主要经营搜狐公司的搜索业务。在搜索业务的同时,也推出搜狗高速浏览器、搜狗输入法、免费邮箱、企业邮箱等业务。
一份2011年搜狗软件工程师的笔试题,下面附有参考答案,感兴趣的同学参考下。
1、下面两段代码中for循环分别执行了多少次?
unsigned short i,j;
for(i=0, j=2; i!=j; i+=5, j+=7)
{}
unsigned short i,j;
for(i=3,j=7;i!=j;i+=3,j+=7)
2、下面程序应该输出多少?
char *c[] = { "ENTER", "NEW", "POINT", "FIRST" };
char **cp[] = { c+3, c+2, c+1, c };
char ***cpp = cp;
int main(void)
{
printf("%s", **++cpp);
printf("%s", *--*++cpp+3);
printf("%s", *cpp[-2]+3);
printf("%s\n", cpp[-1][-1]+1);
return 0;
}
3、已知程序代码如下:
struct S
{
void func1(S &);
void func2(const S&);
void func3(S&) const;
void func4(const S&) const;
};
下面哪些能正常执行()
A、makeS().func1(makeS())
B、makeS().func2(makeS())
C、makeS().func3(makeS())
D、makeS().func4(makeS())
4、下列代码的输出为多少?
int main(void)
{
enum {a, b=5, c, d=4, e};
enum {h,x, y, z, v=120, w, r=99,s,t};
return 0;
}
a、c、e、h、x、y、z、w、s、t的值分别是多少?
5、一个长度为n的数组a[0],a[1],...,a[n-1]。现在更新数组的名个元素,即a[0]变为a[1]到a[n-1]的积
a[1]变为a[0]和a[2]到a[n-1]的积,...,a[n-1]为a[0]到a[n-2]的积。
程序要求:要求具有线性复杂度,不能使用除法运算符。
参考答案:
1,第一个执行了32767次,第二个执行了16383次。注意定义的数据类型是short,i==j当且仅当j已经超过32768(unsigned short的模)后才可以满足。因此可以列式:(0+5x)+65536=2+7x,得x=32767。第二个答案同理可得。
2,第一个是POINT,第二个是ER,第三个是ST,第四个是EW。注意+1的涵意,其实是越过一块地址,“块”的大小由指针维数决定的。
3,用VS试过了,makeS()不知道是什么东西,如果你知道,请留言。
4,a=0,c=6,e=5,h=0,x=1,y=2,z=3,w=121,s=100,t=101,枚举。第一个从0开始,后面的从前面一个数的下一个开始。
5,参考腾讯加分题的第一题,这里稍稍有些不同,因为没有要求空间复杂度,而这里又恰好只给了数组a。解决方法是定义一个数组b,将a中的元素拷贝到b中,然后就可以套用腾讯加分题的方法了(只是a与b的含义互换了)。