• Google 历年笔试面试30题


    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

  • 相关阅读:
    H.Playing games
    P4721 【模板】分治 FFT
    hdu5730 分治fft
    hdu6394Tree lct
    bzoj2763: [JLOI2011]飞行路线 最短路
    bzoj2154: Crash的数字表格 莫比乌斯反演
    bzoj3211: 花神游历各国 线段树
    溢流
    css控制继承
    “<textarea>”内的文字对齐
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4533676.html
Copyright © 2020-2023  润新知