1、对于一个内存地址是32位、内存页是8KB的系统。0X0005F123这个地址的页号与页内偏移分别是多少。 页面大小是8KB,那么页内偏移量是从0x0000(0)~ 0x1FFF(2的13次方 - 1)。0x5F123/8K=2E,余数是1123;则页号是47页,页内偏移量应该是0X00001123。
2、如果X大于0并小于65536,用移位法计算X乘以255的值为: (X
3、一个包含n个节点的四叉树,每个节点都有四个指向孩子节点的指针,这4n个指针中有 3n+1 个空指针。
4、以下两个语句的区别是:第一个动态申请的空间里面的值是随机值,第二个进行了初始化,里面的值为0
[cpp] view plaincopyprint?
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 plaincopyprint?
1. char str[] = "glad to test something";
2. char *p = str;
3. p++;
4. int *p1 = static_cast(p);
5. p1++;
6. p = static_cast(p1);
7. printf("result is %s\n",p); 8、在一冒险游戏里,你见到一个宝箱,身上有N把钥匙,其中一把可以打开宝箱,假如没有任何提示,随机尝试,问:
(1)恰好第K次(1=
少。 (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~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
12、输入格式:第一行输入N(N
输出格式:输出一个整数,表示应该发行的纸币面额,这个整数是已经发行的所有纸币面额都无法表示的最小整数。(已经发行的每个纸币面额最多只能使用一次)
思路:这是一个典型的母函数问题,一般的典型母函数如 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 plaincopyprint?
1. #include
2. using namespace std;
3.
4. const int lmax=10000;
5. int c1[lmax+1],c2[lmax+1];
6.
7. int main(void)
8. {
9. int m,n,i,j,k,a[110];
10. //计算的方法还是模拟手动运算,一个括号一个括号的计算,从前往后
11. while (cin>>m && m)
12. {
13. n=0;
14. for(i = 0; i
15. {
16. scanf("%d",&a[i]);
17. n += a[i];
18. }
19. n += 5; //有可能无法表示的那个数比所有纸币面额的总和还要大
20. for(i = 0; i
21. {
22. c1[i] = 0;
23. c2[i] = 0;
24. }
25. for(i = 0; i
号内的各项系数
26. c1[i] = 1;
27. //第一层循环是一共有 n 个小括号,而刚才已经算过一个了,所以是从
2 到 n
28. // i 就是代表的母函数中第几个大括号中的表达式
29. for(i = 2; i
30. {
31. for(j = 0; j
项的系数
32. {
33. for (k = 0; k
计算的那个括号中的项
34. {
35. c2[j+k] += c1[j]; //合并同类项,他们的系数要加在一
起,所以是加法
36. }
37. }
38. for(j = 0; j
下一个括号里面的每一项
39. {
40. c1[j] = c2[j];
41. c2[j] = 0;
42. }
43. }
44. for(i = 1; i
45. {
46. if(c1[i] == 0)
47. {
48. cout
49. break;
50. }
51. }
52. }
53. return 0;
54. }
1、对于一个内存地址是32位、内存页是8KB的系统。0X0005F123这个地址的页号与页内偏移分别是多少。 页面大小是8KB,那么页内偏移量是从0x0000(0)~ 0x1FFF(2的13次方 - 1)。0x5F123/8K=2E,余数是1123;则页号是47页,页内偏移量应该是0X00001123。
2、如果X大于0并小于65536,用移位法计算X乘以255的值为: (X
3、一个包含n个节点的四叉树,每个节点都有四个指向孩子节点的指针,这4n个指针中有 3n+1 个空指针。
4、以下两个语句的区别是:第一个动态申请的空间里面的值是随机值,第二个进行了初始化,里面的值为0
[cpp] view plaincopyprint?
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 plaincopyprint?
1. char str[] = "glad to test something";
2. char *p = str;
3. p++;
4. int *p1 = static_cast(p);
5. p1++;
6. p = static_cast(p1);
7. printf("result is %s\n",p); 8、在一冒险游戏里,你见到一个宝箱,身上有N把钥匙,其中一把可以打开宝箱,假如没有任何提示,随机尝试,问:
(1)恰好第K次(1=
少。 (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~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
12、输入格式:第一行输入N(N
输出格式:输出一个整数,表示应该发行的纸币面额,这个整数是已经发行的所有纸币面额都无法表示的最小整数。(已经发行的每个纸币面额最多只能使用一次)
思路:这是一个典型的母函数问题,一般的典型母函数如 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 plaincopyprint?
1. #include
2. using namespace std;
3.
4. const int lmax=10000;
5. int c1[lmax+1],c2[lmax+1];
6.
7. int main(void)
8. {
9. int m,n,i,j,k,a[110];
10. //计算的方法还是模拟手动运算,一个括号一个括号的计算,从前往后
11. while (cin>>m && m)
12. {
13. n=0;
14. for(i = 0; i
15. {
16. scanf("%d",&a[i]);
17. n += a[i];
18. }
19. n += 5; //有可能无法表示的那个数比所有纸币面额的总和还要大
20. for(i = 0; i
21. {
22. c1[i] = 0;
23. c2[i] = 0;
24. }
25. for(i = 0; i
号内的各项系数
26. c1[i] = 1;
27. //第一层循环是一共有 n 个小括号,而刚才已经算过一个了,所以是从
2 到 n
28. // i 就是代表的母函数中第几个大括号中的表达式
29. for(i = 2; i
30. {
31. for(j = 0; j
项的系数
32. {
33. for (k = 0; k
计算的那个括号中的项
34. {
35. c2[j+k] += c1[j]; //合并同类项,他们的系数要加在一
起,所以是加法
36. }
37. }
38. for(j = 0; j
下一个括号里面的每一项
39. {
40. c1[j] = c2[j];
41. c2[j] = 0;
42. }
43. }
44. for(i = 1; i
45. {
46. if(c1[i] == 0)
47. {
48. cout
49. break;
50. }
51. }
52. }
53. return 0;
54. }