Google笔试(2015年8月)

华电北风吹

天津大学认知计算与应用重点实验室

日期:2015/8/21

这三道题目的PDF能够在这里下载

https://github.com/ncepuzhengyi/jobHuntingExam/tree/master/jobExam/Problem_20150815_google

Problem 1:

问题1是眼下须要将阻止分成两块,因为组织内有些人之间有矛盾不能分到同一组内。问你是否存在这种划分。

问题一是二分图推断问题,仅仅须要推断无向图是否是二分图就可以。

最简单的方法是採用广度优先搜索+染色法就可以。

#include <iostream>
#include <string>
#include <fstream>
#include <map>
#include <deque>
using namespace std;

#define size 5
int graph[size][size];
int visited[size];
int color[size];

bool  GraphJudge(int nodeNum)
{
    memset(visited, 0, sizeof(visited));
    memset(color, 0, sizeof(color));
    for (int k = 0; k < nodeNum; k++)
    {
        if (visited[k] == 0)
        {
            visited[k] = 1;
            color[k] = 1;
            deque<int> q;
            q.push_back(k);
            while (q.empty()==false)
            {
                int i = q.front();
                q.pop_front();
                for (int j = 0; j < nodeNum; j++)
                {
                    if (graph[i][j] > 0 && i!=j)
                    {
                        if (visited[j] == 0)
                        {
                            q.push_back(j);
                            visited[j] = 1;
                            color[j] = 1 - color[i];
                        }
                        else
                        {
                            if (color[j] == color[i])
                                return false;
                        }
                    }
                }
            }
        }
    }
    return true;
}

int main(int argc, char* argv[])
{
    ifstream in(".\\input.txt");
    cin.rdbuf(in.rdbuf());

    int T;
    cin >> T;
    cin.ignore();
    for (int caseNum = 0; caseNum<T; caseNum++)
    {
        int M;
        cin >> M;
        memset(graph, 0, sizeof(&graph));
        map<string, int> nameIndex;
        map<string, int>::iterator it;
        int nodecount = 0;
        for (int i = 0; i < M; i++)
        {
            int start, end;
            string p;
            cin >> p;
            it = nameIndex.find(p);
            if (it == nameIndex.end())
            {
                nameIndex[p] = nodecount;
                nodecount++;
            }
            start = nameIndex[p];
            cin >> p;
            it = nameIndex.find(p);
            if (it == nameIndex.end())
            {
                nameIndex[p] = nodecount;
                nodecount++;
            }
            end = nameIndex[p];
            graph[start][end] = 1;
        }
        if (GraphJudge(nodecount))
            cout << "Case #" << caseNum + 1 << ":" << "Yes" << endl;
        else
            cout << "Case #" << caseNum + 1 << ":" << "No" << endl;
    }
    system("pause");
    return 0;
}

Problem 2:

问题二确切的说应该算作一个高中物理题,给出斜抛初速度和距离,计算斜抛初始角度。

#include<iostream>
#include <math.h>
#include <iomanip>
#include <ostream>
#include <fstream>
using namespace std;

int main(int argc, char* argv[])
{
    //ifstream in("C:\\Users\\zhengyi\\Desktop\\ConsoleApplication1\\Debug\\input.txt");
    //streambuf *cinbuf = cin.rdbuf(); //save old buf
    //cin.rdbuf(in.rdbuf()); //redirect std::cin to in.txt!

    //ofstream out("C:\\Users\\zhengyi\\Desktop\\ConsoleApplication1\\Debug\\out.txt");
    //streambuf *coutbuf = std::cout.rdbuf(); //save old buf
    //cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!

    //std::cin.rdbuf(cinbuf);   //reset to standard input again
    //std::cout.rdbuf(coutbuf); //reset to standard output again

    int T;
    cin >> T;
    int k = 0;
    while (k < T)
    {
        int V, D;
        cin >> V >> D;
        double theta = asin(9.8 * D / (V * V)) * 90 / 3.14159265;
        cout << "Case #" << k + 1 <<":"<< fixed << setprecision(7) << theta << endl;
        k++;
    }
    return 0;
}

Problem 3:

第三题操作过程是一种相似于插入排序的排序机制,对于接下来的元素。须要往前插入的话就耗费1$。以此计算总共花费。

#include <iostream>
#include <string>
#include <vector>
#include <ostream>
#include <fstream>
using namespace std;

int main(int argc, char* argv[])
{
    //ifstream in("C:\\Users\\zhengyi\\Desktop\\ConsoleApplication1\\Debug\\input.txt");
    //streambuf *cinbuf = cin.rdbuf(); //save old buf
    //cin.rdbuf(in.rdbuf()); //redirect std::cin to in.txt!

    //ofstream out("C:\\Users\\zhengyi\\Desktop\\ConsoleApplication1\\Debug\\out.txt");
    //streambuf *coutbuf = std::cout.rdbuf(); //save old buf
    //cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!

    //std::cin.rdbuf(cinbuf);   //reset to standard input again
    //std::cout.rdbuf(coutbuf); //reset to standard output again

    int N;
    cin >> N;
    for (int i = 0; i < N; i++)
    {
        int n;
        cin >> n;
        int count = 0;
        cin.sync();
        string str;
        vector<string> v1;
        while (count<n)
        {
            getline(cin, str);
            v1.push_back(str);
            count++;
        }
        //v1.erase(v1.begin());
        int cost = 0;
        for (int k = 1; k < n; k++)
        {
            string key = v1[k];
            int t = k - 1;
            if (t >= 0 && v1[t].compare(key) > 0)
            {
                v1[t + 1] = v1[t];
                t--;
                cost++;
            }
            v1[t + 1] = key;
        }
        cout << "Case #" << i + 1 << ":" << cost << endl;
    }
    return 0;
}

三道题目的代码

https://github.com/ncepuzhengyi/jobHuntingExam

以下这个是另外一次google的笔试题目。仅仅收集到了这一道

Problem 4

S0 = ”

S1 = ‘0’

S2 = ‘001’

S3 = ‘0010011’

S4 = ‘001001100011011’

……

SN = SN + ‘0’ + not(reverse( SN ))

reverse是字符串反转

not是0,1转换

求S1010000 的第k个数

small data set: k<105

large data set: k<1018

from math import log
from math import ceil

def Nlen(n):
    return pow(2,n)-1

def LineNum(k):
    return ceil(log(k+1,2))

r=True
def func(x):
    global r
    lastNum=LineNum(x)
    if x==pow(2,lastNum-1):
        if r:
            return ‘0‘
        else:
            return ‘1‘
    if x==1:
        if r:
            return ‘1‘
        else:
            return ‘0‘
    if r:
        r=False
    else:
        r=True
    return func(pow(2,lastNum)-x)

s4=‘‘
for i in range(1,16):
    r=True
    s4+=func(i)
print(s4)
时间: 2024-10-12 13:37:14

Google笔试(2015年8月)的相关文章

Google笔试(2015/8/6)

华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/8/16 Problem 1: Problem 2: Problem 3: Moist has a hobby -- collecting figure skating trading cards. His card collection has been growing, and it is now too large to keep in one disorganized pile. Moist needs to sort the

平台和操作系统,是Google在2007年11月5日公布的手机系统平台,早期由Google开发,后由开放

Android是基于Linux内核[2]的软件平台和操作系统,是Google在2007年11月5日公布的手机系统平台,早期由Google开发,后由开放手机联盟(英语:Open Handset Alliance)(Open... kb.cnblogs.com/zt/andr... - 百度快照 - 91%好评 知识库_博客园 http://bbs.sssc.cn/thread-4458080-1-1.htmlhttp://bbs.sssc.cn/thread-4458079-1-1.htmlhtt

ADT Plugin for eclipse 最新下载地址(2015年10月)

安卓及谷歌官网不容易上,在此整理好下载地址,这样就可以直接用迅雷下载了. Eclipse 最新 Mars 版 Eclipse(暂时还没被墙) Mac 版: http://www.eclipse.org/downloads/download.php?file=/oomph/epp/mars/R1a/eclipse-inst-mac64.tar.gz WIN32 版: http://www.eclipse.org/downloads/download.php?file=/oomph/epp/mars

2015年9月7日 Hank 北京PASS CCIE-RS

CCIE,我心里一直的梦想. 2015年9月7日,我终于圆梦了.     从业9年,一直搞的都是数通RS. 系统的学习以前,我认为是复习原理.结果接触第一个月,完全把我所有的轻视之心完全颠覆.      在淘宝上面花几十块钱买了一套RS的培训视频. 40G. 主讲讲师:林江涛. 对于这位大神,只有拜服. 他讲解的视频里面,理论配合实践,非常详细,而且分解试验非常详细.      开始学习OSPF的时候,才详细了解type-1 到type-7的LSA. 不同的网络类型. 从无到有,最后,根据林si

TIOBE 2015年6月编程语言排行榜

TIOBE排行榜是根据互联网上有经验的程序员.课程和第三方厂商的数量,并使用搜索引擎(如Google.Bing.Yahoo!.百度)以及Wikipedia.Amazon.YouTube统计出排名数据,只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少. 2015年6月的排行榜引人注目的是Objective-C与Swift的排名.

TIOBE编程语言排行榜(2015年6月)

TIOBE 2015年6月编程语言排行榜发布.本月值得关注的是Swift,该语言是由苹果公司在WWDC 2014上推出的新一代编程语言,旨在取代Objective-C.仅发布一月,Swift就进入TIOBE 排行榜Top20. 时隔一年后,Swift再次以骄人的成绩出现在大众眼前,本月排名第14位,并且其份额还在不断攀升中.在Stack Overflow上对157个国家的26,086名开发者的调查中也发现:Swift语言最受开发者欢迎,其以76.6%的比重高占榜首.详见:面世已一年:快速发展的S

2015年3月-前端开发月刊

1. 创业 2. 职业|项目管理 3. git 4. 知乎(zhihu) 5. 其它 6. Angular 7. 看书学习 8. 移动开发 9. Html5 10. CSS3 11. Javascript 前言: 技术只是一种手段,不是目的.人生的投资有很多种,很多个方向.技术只是其中的一个方向,是目前兴趣的所在点.兴趣会随着岁月的流逝,年龄的增长,会发生变化. 当然鸡蛋不能放在一个篮子里边,所以, 有空的时候提前看看,创业类的,产品,市场,营销类的书籍,提前给自己找点出路,免得后期技术路线走不

TIOBE 2015年7月编程语言排行榜:C++的复兴

TIOBE 2015年7月编程语言排行榜:C++的复兴 发表于2015-07-13 17:03| 16086次阅读| 来源CSDN| 128 条评论| 作者钱曙光 编程语言排行榜TIOBEC++ 摘要:C++是2015年上半年同比增长最快的编程语言,具体为C++ 增长3.1%.Java 增长2.0%.C#增长1.6%.Python增长1.6%. C++大幅度增长的原因可能是引入了新的C++11标准,这使得C++被大范围的接受. C++是2015年上半年同比增长最快的编程语言,具体为: 与去年相比

WINDOWS 10 企业版LTSB 2015年11月补丁更新情况

WINDOWS 10 企业版LTSB 2015年11月补丁与其他WINDOWS 10版本自动更新KB3105213,按微软对LTSB的规划,LTSB不会轻易增加新功能,所以不会收到其他版本推送的1511更新包,安装这个KB3105213不会改变LTSB内部版本号,LTSB目前内部版本号还是10240, 不会更新到10586版本. LTSB的内部版本按以前的官方说明,一年只会升级一次