[读书笔记]编程之美(一)
不得不说编程之美是一本很有意思的书,里面的各式各样新奇的问题,总是可以通过课上讲的简单的问题来解决,对于训练自己的思维的确有很大的好处。一般解决复杂的问题,我们总是可以通过:1、画图:链表、二叉树,2、举例,3、分解:分治法、动态规划来解决。
游戏 程序也是游戏的一种
1.1让CPU占用率曲线听你指挥
- 题目:用户决定CPU的占有率
- 思路:(举例)首先我们要明确什么是CPU的占有率,在任务管理器的一个刷新周期内,CPU忙(执行应用程序)的时间和刷新周期总时间的比率,就是CPU的占有率。也就是说调节CPU的忙闲比。
- 核心代码:
for(;;)
{
for(int i = 0; i < 9600000; i++)
;
Sleep(10);
}
1.2中国象棋将帅问题
题目:只剩A、B两个将帅,输出A、B所有合法位置。要求在代码中只能使用一个字节存储变量。
思路:(举例)
遍历A的位置
遍历B的位置
判断A、B的位置组合是否满足要求。如果满足,则输出。
- 核心代码:
BYTE i = 81;
while(i--)
{
if(i/9 % 3 == i % 9 % 3)
continue;
printf("A = %d, B = %d\n", i/9+1, i%9+1);
}
1.3一摞烙饼的排序
- 问题:假设有n块大小不一的烙饼,那最少要翻几次,才能达到大小有序的结果呢?
- 思路:(画图)我们先把最大的烙饼翻到最上面,然后再翻到最下面,然后对n-1、n-2个饼重复这个过程,至多需要2(n-1)次翻转。如果有几个相对有序就可以略过。
- 核心代码:
for(int i = 1;i < m_nCakeCnt; i++)
{
Reverse(0,i);
m_ReverseCakeArraySwap[step] = i;
Search(step +