1、已知两个数字为1~30之间的数字,甲知道两数之和,乙知道两数之积,甲问乙:“你知道是哪两个数吗?”乙说:“不知道”。乙问甲:“你知道是哪两个数吗?”甲说:“也不知道”。于是,乙说:“那我知道了”,随后甲也说:“那我也知道了”,这两个数是什么?

答:1和4 或者1和7

2、一个环形公路,上面有N个站点,A1, ..., AN,其中Ai和Ai+1之间的距离为Di,AN和A1之间的距离为D0。
高效的求第i和第j个站点之间的距离,空间复杂度不超过O(N)
它给出了部分代码如下:
#define N 25
double D[N]
....
void Preprocess()
{
     //Write your code1;
}
double Distance(int i, int j)
{
      //Write your code2;
}

const int N = 10;
int D[N];int A1toX[N];void Preprocess()
{srand(time(0));for (int i = 0; i < N; ++i){D[i] = (rand()/(RAND_MAX+1.0)) * N;}A1toX[1] = D[1];     //from A1 to A2for (int i = 2; i < N; ++i){A1toX[i] = A1toX[i-1] + D[i];    //distance from A1 to each point}A1toX[0] = A1toX[N-1] + D[0];    // total length
}int distance(int i, int j)
{int di = (i == 0) ? 0 : A1toX[i-1];int dj = (j ==0) ? 0 : A1toX[j-1];int dist = abs(di - dj);return dist > A1toX[0]/2 ? A1toX[0] - dist : dist;
}int main(void)
{Preprocess();for (int i = 0; i <N; ++i){cout<<D[i]<<" ";}cout<<endl;for (int i = 1; i <= N; ++i){cout<<"distance from A1 to A"<<i<<": "<<distance(1, i)<<endl;}return 0;
}

3、 一个字符串,压缩其中的连续空格为1个后,对其中的每个字串逆序打印出来。比如"abc   efg  hij"打印为"cba gfe jih"。

#include<iostream>
#include<cstdio>
#include<stack>
#include<string>
using namespace std;string reverse(string str)
{stack<char> stk;int len = str.length();string ret = "";for (int p = 0, q = 0;p < len;){if (str[p] == ' '){ret.append(1,' ');for (q = p; q < len && str[q] == ' '; q++){}p = q;}else{for (q = p; q < len && str[q] != ' '; q++){stk.push(str[q]);}while(!stk.empty()){ret.append(1,stk.top());stk.pop();}p = q;}}return ret;
}
int main(void)
{string s = "abc def   ghi";cout<<reverse(s).c_str()<<endl;return 0;
} 

4、将一个较大的钱,不超过1000000(10^6)的人民币,兑换成数量不限的100、50、10、5、2、1的组合,请问共有多少种组合呢?(完全背包)(其它选择题考的是有关:操作系统、树、概率题、最大生成树有关的题,另外听老梦说,谷歌不给人霸笔的机会。)。

第一种方法(母函数):

#define NUM 7
int money[NUM] = {1, 2, 5, 10, 20, 50, 100};// 母函数解法
int NumOfCoins(int value)
{int i , j , k , c1[1010] , c2[1010];for(i = 0 ; i <= value ; ++i){c1[i] = 1;c2[i] = 0;}//第一层循环是一共有 n 个小括号,而刚才已经算过一个了   // i 就是代表的母函数中第几个大括号中的表达式 for(i = 1 ; i < NUM ; ++i){for(j = 0 ; j <= value ; ++j)   //j 就是指的已经计算出的各项的系数{for(k = 0 ; k+j <= value ; k += money[i])  //k 就是指将要计算的那个括号中的项c2[k+j] += c1[j];}for(j = 0 ; j <= value ; ++j)  // 刷新一下数据,继续下一次计算,就是下一个括号里面的每一项{c1[j] = c2[j];c2[j] = 0;}}return c1[value];
}

第二种方法(动态规划):
我们可以将它形式化为:

硬搜的话肯定是可以出结果的,但时间复杂度太高。
第一种方法:
设 F[n] 为用那么多种面值组成 n 的方法个数。则 F[n] 可以分成这样互不重复的几个部分:
只用 50 及以下的面值构成 [n] + 0 张 100
只用 50 及以下的面值构成 [n-100] + 1 张 100
只用 50 及以下的面值构成 [n-200] + 2 张 100
……
也就是说,按 F[n] 的组成方案中 100 的张数,将 F[n] 划分成若干等价类,等价类的划分要不重复、不遗漏。这些等价类恰好完整覆盖了 F[n] 的所有情况。
然后对于 50 及以下的方案又可以按 50 的张数划分等价类。于是像这样一层一层递归下去……就可以得到结果了。
把上面的递归过程反过来,从下往上递推,这就是动态规划了。代码(用到了一些 C99 特性,比如栈上的可变长数组):
时间复杂度 < O(N^2)

#define NUM 7
int money[NUM] = {1, 2, 5, 10, 20, 50, 100};
// 动态规划解法
int NumOfCoins(int value)
{int i , j , t , dp[7][1010];for(i = 0 ; i <= value ; ++i)dp[0][i] = 1;for(i = 1 ; i < NUM ; ++i){for(j = 0 ; j <= value ; ++j){t = j;dp[i][j] = 0;while(t >= 0){dp[i][j] += dp[i-1][t];t -= money[i];}}}return dp[6][value];
}

其中 dp[i][j] 表示只用第 i 张面值及以下构成 j 用多少种方法。
改进如下:
a[6][n] = ar[6][n-100]     // 至少包含 1 张 100 的拆分个数
              + ar[5][n]         // 不包含 100 的拆分个数
直接把时间复杂度从 O(n^2) 降到了 O(n):

#define NUM 7
int money[NUM] = {1, 2, 5, 10, 20, 50, 100};
// 动态规划解法(完全背包)
int NumOfCoins(int value)
{int i , j , dp[7][1010];for(i = 0 ; i <= value ; ++i)dp[0][i] = 1;for(i = 1 ; i < NUM ; ++i){for(j = 0 ; j <= value ; ++j){if(j >= money[i])dp[i][j] = dp[i][j - money[i]] + dp[i - 1][j];elsedp[i][j] = dp[i-1][j];}}return dp[6][value];
}

或者使用滚动数组也是可以的

#define NUM 7
int money[NUM] = {1, 2, 5, 10, 20, 50, 100};
int f[1010] , bf[1010];
// f[j] == f[i][j]   bf[j] == bf[i-1][j]
int NumofCoin2(int value)
{int i , j;for(j = 0 ; j <= value ; ++j)f[j] = 0 , bf[j] = 0;bf[0] = 1;for(i = 0 ; i < NUM ; ++i){for(j = 0 ; j <= value ; ++j){if(j >= money[i])f[j] = f[j-money[i]] + bf[j];elsef[j] = bf[j] ;}for(j = 0; j <= value ; ++j)bf[j] = f[j] , f[j] = 0;}return bf[value];}

引用: http://blog.henix.info/blog/google-exam-integer-partition.html
http://www.cnblogs.com/alexyang8/archive/2011/10/15/2212850.html
http://hi.baidu.com/lennydou/item/93a210c44c6a4977cfd4f80c

2011Google校园招聘笔试题相关推荐

  1. 2014 WAP校园招聘笔试题

    2014 WAP校园招聘笔试题 Problem's Link:   http://www.doc88.com/p-6751117015483.html WAP公司笔试题 We are planning ...

  2. 十月下旬腾讯,网易游戏,百度盛大迅雷校园招聘笔试题集锦(10.25)

    十月下旬腾讯,网易游戏,百度最新校园招聘笔试题集锦 引言 笔试啊,笔试,面试啊,面试,找工作啊,找工作.此文十月百度,阿里巴巴,迅雷搜狗最新面试十一题已经整理了最新的面试题70道,本文依次整理腾讯,网 ...

  3. 2013搜狗校园招聘笔试题

    研习了Linux公社发布的2013搜狗校园招聘笔试题,还是有些收获的. //第一题:以下程序的输出是___________________ class Base { public:Base(int j ...

  4. 百度2015校园招聘笔试题

    百度2015校园招聘笔试题(自己凭记忆第一时间,记录了这么多,有些描述比较简单,请大神们补充) 一 .简答题(30分) 1. 进程和线程的联系与区别. 2. 简述数据库的存储过程及其优点. 3. st ...

  5. k个一组翻转链表 哔哩哔哩2020校园招聘笔试题/LeetCode_25(困难)讲解

    目录标题 一.题目信息 二.解题思路 三.代码实现 四.其他精选题目分享 一.题目信息 LeetCode版本 牛客网版本 下面我以牛客网为例写代码 题目需要先输入一组数字代表链表的值,以#代表结尾. ...

  6. 2014年360校园招聘笔试题,干货分享

    2014年360校园招聘笔试题,希望对将要找工作的同学有帮助,加油,绝对干货分享!!! 具体内容见附件! 转载请注明出处:http://blog.csdn.net/happy_cheng

  7. 360 2013校园招聘笔试题(含参考答案)

    360 2013校园招聘笔试题(含参考答案) 参考答案: 1.D  5*5*5=125 2.C  排除法 3.A  仅个人意见 4.A 5.D   ABC三语句一定保留,D不确定,EF一定删除 6.不 ...

  8. 锐捷c语言笔试题,锐捷校园招聘笔试题

    题不多,全是c语言题,下面只是一些不太确定答案的.题, 1. int x=3,y=4,z=5; printf("%d\n",~((x^y)&&!z)); 正确答案: ...

  9. 2005年中兴软件校园招聘笔试题

    2005年中兴软件校园招聘笔试题 第一部分    数据结构和算法 1.      假设执行语句S的时间为O(1),则执行下列程序短的时间为() for(i=1;i<=n;i++) for(j=I ...

最新文章

  1. OVS 端口抽象层次(四十)
  2. phpcms v9 index.php,【转】phpcms v9中tags列表页url用拼音作为路径的方法
  3. 获取SQL SERVER某个数据库中所有存储过程的参数
  4. 自己开发的在线视频下载工具,基于Java多线程
  5. 无连接网络通信程序UDP
  6. nlp论文-《Neural Machine Translation by Jointly Learning to Align and Translate》-基于联合学习对齐和翻译的神经机器翻译(一)
  7. 大蚂蚁在64位系统下,右键没有快发的解决方案
  8. java 循环写法_java的for循环的几种写法
  9. [转]magento2项目上线注意事项 切换到产品模式
  10. 开启人才进阶之旅,鲲鹏开发者技术沙龙点燃计算行业激情
  11. try except python_Python的“异常”处理——try语句
  12. VMware黑屏解决方法
  13. mysql的配置文件名称是_【MySQL学生手册】MySQL的配置文件
  14. windows安装pdf虚拟打印机
  15. 通用-描述文件找不到
  16. 关于计算机国考知识点,2020国考申论知识点之了解阅卷人 (有课整理版)
  17. form表单字段默认值
  18. Spring整合日志框架Log4j2
  19. 互联网运营平台指标体系_滴滴数据仓库指标体系建设实践
  20. mathtype一步将word自带的公式编辑器的公式换成mathtype类型

热门文章

  1. 盲人也能用,优酷App做了哪些无障碍实践?
  2. 2020年中国服装行业数据中台研究报告
  3. 边缘端手势识别:AI 交互的正确打开方式
  4. 计算机如何“看懂”图片?达摩院提出新的研究方法
  5. 数据与知识管理属于计算机科学研究方向中的,知识管理技术与应用
  6. 浅谈街霸的帧数据 (一):frame data
  7. 一天学完spark的Scala基础语法教程五、闭包(idea版本)
  8. 程序员数学基础【三、取模运算(取余运算功能重叠部分)】(Python版本)
  9. python pynlpir中科院分词的使用
  10. MySQL的varchar定义长度到底是字节还是字符