您的位置:首页 > 职场人生

Google 历年笔试面试30题

2015-05-27 15:59 302 查看
1、正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12
(1)、设计一个函数void generate(int a,int b,int N ,int * Q)计算Q的前几项
(2)、设计测试数据来验证函数程序在各种输入下的正确性。

C++实现:

#include<iostream>
using namespace std;

void generate(int a,int b,int N,int *Q)
{
int qa=1;
int qb=1;
int index=0;
while(index<N)
{
if(a*qa<b*qb)
{
Q[index++]=a*qa;
qa++;
}
else if(a*qa>b*qb)
{
Q[index++]=b*qb;
qb++;
}
else
{
Q[index++]=a*qa;
qa++;
qb++;
}
}
}

int main()
{
int *Q=new int[11];
generate(3,5,10,Q);
for(int i=0;i<10;++i)
cout<<Q[i]<<' ';
cout<<endl;
}


变形,如果只包含数a和b,实现代码:

#include<iostream>
using namespace std;

void generate(int a,int b,int N,int *Q)
{
if(Q==NULL)
return;
int index=1;
Q[0]=1;
int *qa=Q;
int *qb=Q;
while(index<=N+1)
{
int minvalue=min(*qa*a,*qb*b);
Q[index]=minvalue;
while(*qa*a<=minvalue)
qa++;
while(*qb*b<=minvalue)
qb++;
++index;
}
}

int main()
{
int *Q=new int[11];
generate(3,5,10,Q);
for(int i=1;i<11;++i)
cout<<Q[i]<<' ';
cout<<endl;
}


2、有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在答谢字母的前面(大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法 c语言函数原型void proc(char *str) 也可以采用你自己熟悉的语言。

#include<iostream>
#include<cstring>
#include<ctype.h>
using namespace std;

void swap(char *a,char *b)
{
char c=*a;
*a=*b;
*b=c;
}
void proc(char *str)
{
if(str==NULL)
return;
int n=strlen(str);
int i=0,j=n-1;
while(i<j)
{
while(i<j&&islower(str[i]))
++i;
while(i<j&&isupper(str[j]))
--j;
if(i<j)
swap(&str[i],&str[j]);
}
}

int main()
{
char ch[]="AHdfhIKhhGkGE";
proc(ch);
cout<<ch<<endl;
}


3、如何随机选取1000个关键字?
给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字)。如何才能从这个无穷尽的流中随机的选取1000个关键字?
http://www.xuebuyuan.com/551780.html http://ask.julyedu.com/question/447
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: