http://blog.csdn.net/hackbuteer1/article/details/6878570

1、对于一个内存地址是32位、内存页是8KB的系统。0X0005F123这个地址的页号与页内偏移分别是多少。

页面大小是8KB,那么页内偏移量是从0x0000(0)~ 0x1FFF(2的13次方 - 1)。0x5F123/8K=2E,余数是1123;则页号是47页,页内偏移量应该是0X00001123。

2、如果X大于0并小于65536,用移位法计算X乘以255的值为:    (X<<8)-X

X<<8-X是不对的,因为移位运算符的优先级没有减号的优先级高,首先计算8-X为0,X左移0位还是8。

3、一个包含n个节点的四叉树,每个节点都有四个指向孩子节点的指针,这4n个指针中有   3n+1   个空指针。

4、以下两个语句的区别是:第一个动态申请的空间里面的值是随机值,第二个进行了初始化,里面的值为0

[cpp] view plaincopy
  1. int *p1 = new int[10];
  2. int *p2 = new int[10]();

5、计算机在内存中存储数据时使用了大、小端模式,请分别写出A=0X123456在不同情况下的首字节是,大端模式:0X12           小端模式:0X56           X86结构的计算机使用  小端    模式。

一般来说,大部分用户的操作系统(如windows, FreeBsd,Linux)是小端模式的。少部分,如MAC OS,是大端模式 的。

6、在游戏设计中,经常会根据不同的游戏状态调用不同的函数,我们可以通过函数指针来实现这一功能,请声明一个参数为int *,返回值为int的函数指针:

int (*fun)(int *)

7、下面程序运行后的结果为:to test something

[cpp] view plaincopy
  1. char str[] = "glad to test something";
  2. char *p = str;
  3. p++;
  4. int *p1 = static_cast<int *>(p);
  5. p1++;
  6. p = static_cast<char *>(p1);
  7. printf("result is %s\n",p);

8、在一冒险游戏里,你见到一个宝箱,身上有N把钥匙,其中一把可以打开宝箱,假如没有任何提示,随机尝试,问:

(1)恰好第K次(1=<K<=N)打开宝箱的概率是多少。  (1-1/n)*(1-1/(n-1))*(1-1/(n-2))***(1/(n-k+1)) = 1/n

(2)平均需要尝试多少次。

这个就是求期望值   由于每次打开宝箱的概率都是1/n,则期望值为:   1*(1/n)+2*(1/n)+3*(1/n)+......+n*(1/n) = (n+1)/2

9、头文件中ifndef / define / endif 是做什么用的?
10、代码里有时可以看到extern “C”,这语句是做什么用的?
11、平均要取多少个(0,1)中的随机数才能让和超过1。 

12、在下列乘法算式中,每个字母代表0~9的一个数字,而且不同的字母代表不同的数字:

ABCDEFGH

*                 AJ

------------------

EJAHFDGKC

BDFHAJEC

------------------

CCCCCCCCC

请写出推导的过程。

本题唯一解为:A=2、B=4、C=6、D=9、E=1、F=3、G=5、H=8、J=7、K=0

13、输入格式:第一行输入N(N<=100)表示流通的纸币面额数量;第二行N个纸币的具体表示的面额,从小到大排列,取值【1,10^6】。
输出格式:输出一个整数,表示应该发行的纸币面额,这个整数是已经发行的所有纸币面额都无法表示的最小整数。(已经发行的每个纸币面额最多只能使用一次)

输入

输出

5

1 2 3 9 100

7

5

1 2 4 9 100

8

5

1 2 4 7 100

15

思路:这是一个典型的母函数问题,一般的典型母函数如 G(x)=  (1+x+x^2+x^3+x^4+x^5+....)*(1+x^2+x^4+x^6+x^8+x^10+....)*(1+x^3+x^6+x^9+x^12....).....

这个题目中的每个纸币只能够使用0次或1次,在上面的那个一般的母函数的基础上修改一下就行了,就很简单了。。

具体代码如下:

[cpp] view plaincopy
  1. #include <iostream>
  2. using namespace std;
  3. const int lmax=10000;
  4. int c1[lmax+1],c2[lmax+1];
  5. int main(void)
  6. {
  7. int m,n,i,j,k,a[110];
  8. //计算的方法还是模拟手动运算,一个括号一个括号的计算,从前往后
  9. while (cin>>m && m)
  10. {
  11. n=0;
  12. for(i = 0; i < m; i++)
  13. {
  14. scanf("%d",&a[i]);
  15. n += a[i];
  16. }
  17. n += 5;     //有可能无法表示的那个数比所有纸币面额的总和还要大
  18. for(i = 0; i <= n; i++)
  19. {
  20. c1[i] = 0;
  21. c2[i] = 0;
  22. }
  23. for(i = 0; i < 2*a[0]; i += a[0])        //母函数的表达式中第一个括号内的各项系数
  24. c1[i] = 1;
  25. //第一层循环是一共有 n 个小括号,而刚才已经算过一个了,所以是从2 到 n
  26. // i 就是代表的母函数中第几个大括号中的表达式
  27. for(i = 2; i <= m; i++)
  28. {
  29. for(j = 0; j <= n; j++)              //j 就是指的已经计算出的各项的系数
  30. {
  31. for (k = 0; k < 2*a[i-1]; k += a[i-1])      //k 就是指将要计算的那个括号中的项//要是扩展为可以用多张相同的钱,但是钱的数量有限制,设同一种钱的数量是t,则(t+1)*a[i-1]
  32. {
  33. c2[j+k] += c1[j];        //合并同类项,他们的系数要加在一起,所以是加法
  34. }
  35. }
  36. for(j = 0; j <= n; j++)    // 刷新一下数据,继续下一次计算,就是下一个括号里面的每一项
  37. {
  38. c1[j] = c2[j];
  39. c2[j] = 0;
  40. }
  41. }
  42. for(i = 1; i <= n; i++)
  43. {
  44. if(c1[i] == 0)
  45. {
  46. cout<<i<<endl;      //找出第一个无法表示的纸币面额
  47. break;
  48. }
  49. }
  50. }
  51. return 0;
  52. }

这个题目我认为可以用背包的思想解决,没有必要用到母函数。

至于是否正确,以后再验证

先对钱币从小到大排序,然后再插入一个元素,大小是所有元素之和再加1.
for i =1 ; i<n; ++i
    for (int v = money[i+1]-1;  v> = money[i]; --v)
           if !dp[v]
               if dp[v-money[ i]]
                   dp[v] = true
               else
                    可能有结果

关于母函数的阐述http://www.wutianqi.com/?p=596

母函数(Generating function)详解

— Tanky Woo

在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。

母函数可分为很多种,包括普通母函数、指数母函数、L级数、贝尔级数和狄利克雷级数。对每个序列都可以写出以上每个类型的一个母函数。构造母函数的目的一般是为了解决某个特定的问题,因此选用何种母函数视乎序列本身的特性和问题的类型。

这里先给出两句话,不懂的可以等看完这篇文章再回过头来看:

1.“把组合问题的加法法则和幂级数的乘幂对应起来”

2.“母函数的思想很简单 — 就是把离散数列和幂级数一 一对应起来,把离散数列间的相互结合关系对应成为幂级数间的运算关系,最后由幂级数形式来确定离散数列的构造. “

我们首先来看下这个多项式乘法:

母函数图(1)

由此可以看出:

1.x的系数是a1,a2,…an 的单个组合的全体。

2. x^2的系数是a1,a2,…a2的两个组合的全体。

………

n. x^n的系数是a1,a2,….an的n个组合的全体(只有1个)。

进一步得到:

母函数图(2)

母函数的定义

对于序列a0,a1,a2,…构造一函数:

母函数图(3)

称函数G(x)是序列a0,a1,a2,…的母函数。

这里先给出2个例子,等会再结合题目分析:

第一种:

有1克、2克、3克、4克的砝码各一枚,能称出哪几种重量?每种重量各有几种可能方案?

考虑用母函数来解决这个问题:

我们假设x表示砝码,x的指数表示砝码的重量,这样:

1个1克的砝码可以用函数1+1*x^1表示,

1个2克的砝码可以用函数1+1*x^2表示,

1个3克的砝码可以用函数1+1*x^3表示,

1个4克的砝码可以用函数1+1*x^4表示,

上面这四个式子懂吗?

我们拿1+x^2来说,前面已经说过,x表示砝码,x的指数表示砝码的重量!初始状态时,这里就是一个质量为2的砝码。

那么前面的1表示什么?按照上面的理解,1其实应该写为:1*x^0,即1代表重量为2的砝码数量为0个。

所以这里1+1*x^2 = 1*x^0 + 1*x^2,即表示2克的砝码有两种状态,不取或取,不取则为1*x^0,取则为1*x^2

不知道大家理解没,我们这里结合前面那句话:

“把组合问题的加法法则和幂级数的乘幂对应起来“

接着讨论上面的1+x^2,这里x前面的系数有什么意义?

这里的系数表示状态数(方案数)

1+x^2,也就是1*x^0 + 1*x^2,也就是上面说的不取2克砝码,此时有1种状态;或者取2克砝码,此时也有1种状态。(分析!)

所以,前面说的那句话的意义大家可以理解了吧?

几种砝码的组合可以称重的情况,可以用以上几个函数的乘积表示:

(1+x)(1+x^2)(1+x^3)(1+x^4)

=(1+x+x^2+x^4)(1+x^3+^4+x^7)

=1 + x + x^2 + 2*x^3 + 2*x^4 + 2*x^5 + 2*x^6 + 2*x^7 + x^8 + x^9 + x^10

从上面的函数知道:可称出从1克到10克,系数便是方案数。(!!!经典!!!)

例如右端有2^x^5 项,即称出5克的方案有2种:5=3+2=4+1;同样,6=1+2+3=4+2;10=1+2+3+4。

故称出6克的方案数有2种,称出10克的方案数有1种 。


接着上面,接下来是第二种情况:

第二种:

求用1分、2分、3分的邮票贴出不同数值的方案数:

大家把这种情况和第一种比较有何区别?第一种每种是一个,而这里每种是无限的。

母函数图(4)

以展开后的x^4为例,其系数为4,即4拆分成1、2、3之和的拆分方案数为4;

即 :4=1+1+1+1=1+1+2=1+3=2+2

这里再引出两个概念"整数拆分"和"拆分数":

所谓整数拆分即把整数分解成若干整数的和(相当于把n个无区别的球放到n个无标志的盒子,盒子允许空,也允许放多于一个球)。

整数拆分成若干整数的和,办法不一,不同拆分法的总数叫做拆分数。

现在以上面的第二种情况每种种类个数无限为例,给出模板:

#include <iostream>
using namespace std;
// Author: Tanky Woo
// www.wutianqi.com
const int _max = 10001;
// c1是保存各项质量砝码可以组合的数目
// c2是中间量,保存没一次的情况
int c1[_max], c2[_max];
int main()
{   //int n,i,j,k;int nNum;   // int i, j, k;while(cin >> nNum){for(i=0; i<=nNum; ++i)   // ---- ①{c1[i] = 1;c2[i] = 0;}for(i=2; i<=nNum; ++i)   // ----- ②{for(j=0; j<=nNum; ++j)   // ----- ③for(k=0; k+j<=nNum; k+=i)  // ---- ④{c2[j+k] += c1[j];}for(j=0; j<=nNum; ++j)     // ---- ⑤{c1[j] = c2[j];c2[j] = 0;}}cout << c1[nNum] << endl;}return 0;
}

我们来解释下上面标志的各个地方:(***********!!!重点!!!***********)

①  、首先对c1初始化,由第一个表达式(1+x+x^2+..x^n)初始化,把质量从0到n的所有砝码都初始化为1.

②  、 i从2到n遍历,这里i就是指第i个表达式,上面给出的第二种母函数关系式里,每一个括号括起来的就是一个表达式。

③、j 从0到n遍历,这里j就是(前面i個表达式累乘的表达式)里第j个变量,(这里感谢一下seagg朋友给我指出的错误,大家可以看下留言处的讨论)。如(1+x)(1+x^2)(1+x^3),j先指示的是1和x的系数,i=2执行完之后变为

(1+x+x^2+x^3)(1+x^3),这时候j应该指示的是合并后的第一个括号的四个变量的系数。

④ 、 k表示的是第j个指数,所以k每次增i(因为第i个表达式的增量是i)。

⑤  、把c2的值赋给c1,而把c2初始化为0,因为c2每次是从一个表达式中开始的。


咱们赶快趁热打铁,来几道题目:

(相应题目解析均在相应的代码里分析)

1.  题目:http://acm.hdu.edu.cn/showproblem.php?pid=1028

代码:http://www.wutianqi.com/?p=587

这题大家看看简单不?把上面的模板理解了,这题就是小Case!

看看这题:

2.  题目:http://acm.hdu.edu.cn/showproblem.php?pid=1398

代码:http://www.wutianqi.com/?p=590

要说和前一题的区别,就只需要改2个地方。 在i遍历表达式时(可以参考我的资料—《母函数详解》),把i<=nNum改成了i*i<=nNum,其次在k遍历指数时把k+=i变成了k+=i*i; Ok,说来说去还是套模板~~~

3.  题目:http://acm.hdu.edu.cn/showproblem.php?pid=1085

代码:http://www.wutianqi.com/?p=592

这题终于变化了一点,但是万变不离其中。

大家好好分析下,结合代码就会懂了。

4.  题目:http://acm.hdu.edu.cn/showproblem.php?pid=1171

代码:http://www.wutianqi.com/?p=594

还有一些题目,大家有时间自己做做:

HDOJ:1709,1028、1709、1085、1171、1398、2069、2152

(原创文章,欢迎各位转载,但是请不要任意删除文章中链接,请自觉尊重文章版权,违法必究,谢谢合作。Tanky Woo原创, www.WuTianQi.com)

附:

1.在维基百科里讲到了普通母函數、指數母函數、L級數、貝爾級數和狄利克雷級數:

http://zh.wikipedia.org/zh-tw/%E6%AF%8D%E5%87%BD%E6%95%B0

2.Matrix67大牛那有篇文章:什么是生成函数:

http://www.matrix67.com/blog/archives/120

3.大家可以看看杭电的ACM课件的母函数那篇,我这里的图片以及一些内容都引至那。


如果大家有问题或者资料里的内容有错误,可以留言给出,博客: http://www.wutianqi.com/

Tanky Woo原创文章,转载请注明出处:http://www.wutianqi.com/?p=596。

网易游戏2011.10.15校园招聘会笔试题相关推荐

  1. 网易游戏2011 10 15校园招聘会笔试题

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 1.对于 ...

  2. 网易游戏2011.10.15校园招聘笔试题

    1.对于一个内存地址是32位.内存页是8KB的系统.0X0005F123这个地址的页号与页内偏移分别是多少. 页面大小是8KB,那么页内偏移量是从0x0000(0)~ 0x1FFF(2的13次方 - ...

  3. 腾讯2011.10.15校园招聘会笔试题

    转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/6878287 1.下面的排序算法中,初始数据集的排列顺序对算法的性能无影响 ...

  4. (转)腾讯2011.10.15校园招聘会笔试题

    1.下面的排序算法中,初始数据集的排列顺序对算法的性能无影响的是() A.插入排序                      B.堆排序                    C.冒泡排序       ...

  5. 浙江绿盟科技2011.10.14校园招聘会笔试题

    1.以下哪些协议不是应用层通信协议? A.HTTP.TELNET          B.FTP.SMTP       C.SNMP.NBNS         D.ICMP.ARP 2.Ping命令是使 ...

  6. 百度2011.10.16校园招聘会笔试题

    一.算法设计 1.设rand(s,t)返回[s,t]之间的随机小数,利用该函数在一个半径为R的圆内找随机n个点,并给出时间复杂度分析. 思路:这个使用数学中的极坐标来解决,先调用[s1,t1]随机产生 ...

  7. 2012九月十月腾讯,网易游戏,百度最新校园招聘笔试题

    十月下旬腾讯,网易游戏,百度最新校园招聘笔试题集锦(第271-330题) 引言 此文十月百度,阿里巴巴,迅雷搜狗最新面试十一题已经整理了最新的面试题70道,本文依次整理腾讯,网易游戏,百度等各大公司最 ...

  8. 淘宝2011.9.21校园招聘会笔试题+答案

    2019独角兽企业重金招聘Python工程师标准>>> 一.单选题 1.我们有很多瓶无色的液体,其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了以后会在5分钟后死亡,而喝到蒸馏水的 ...

  9. 搜狐2012.9.15校园招聘会笔试题

    一.不定项选择题 1.以下程序的打印结果是() #include<iostream> using namespace std;void swap_int(int a , int b) {i ...

最新文章

  1. 进程间通信学习小结(共享内存)
  2. 《剑指Offer》题目:树的子结构
  3. maven仓库阿里云镜像配置
  4. iptables命令语法(3)
  5. 报错处理:sh: 1: Syntax error: “(“ unexpected
  6. CSS——icon 全解
  7. 在一个非套接字上尝试了一个操作。_鼠标+键盘上一个键,Excel操作效率瞬间提高一个档次,这也太神了...
  8. Spring连接mysql数据库错误:Cannot load JDBC driver class '${driver}'
  9. mysql sqlite 分页查询_sqlite分页查询
  10. 【GPU+ubuntu】Ubuntu下的Tensorflow-gpu等各种环境和包的安装
  11. 谷歌浏览器怎么网页截图
  12. vb使用open方法读写文件
  13. Ubuntu安装ASIO开发库
  14. mongodb 日期分组聚合_如何在MongoDB中按其他字段分组时聚合时间序列数据?
  15. 不知不觉,写了一个编译器(一)
  16. Python以TCp搭建小游戏服务器
  17. 项目总结 【电商后台管理系统】
  18. html响应式布局手机屏幕导航条,美图响应式布局导航条效果
  19. 基于JAVA餐饮掌上设备点餐系统计算机毕业设计源码+系统+lw文档+部署
  20. 华为mate9安装Fiddler证书

热门文章

  1. 九、Docker快速搭建Elastic Stack(上篇)
  2. 使用LSTM进行情感分析
  3. DNN盛行的当下,老旧的核(kernel)方法或能打开神经网络的魔盒
  4. Github 1.3万星,迅猛发展的JAX对比TensorFlow、PyTorch
  5. 多种数据形式下智能问答的应用解读
  6. 知识图谱理论与实践(以问答系统为例)
  7. 结合业务场景案例实践分析,倾囊相授美团BERT的探索经验
  8. ICCV 2019 开源论文 | 基于元学习和AutoML的模型压缩新方法
  9. 从变分编码、信息瓶颈到正态分布:论遗忘的重要性
  10. 超详细解读:神经语义解析的结构化表示学习 | 附代码分析