3.30
今晚开始正式阅读编程之美。今晚心神有点乱。用了两节时间看了一道题:NIM游戏。就是给M颗石头,让你发堆,然后先B后A的顺序拿,每次拿1个以上。问如何分堆才能保证A必胜。
我的结论是:
(1)如果存在一个对A的安全状态T,那么如果T‘能够在一步转为T,则T’是A的必败状态。
(2)此题的思路的关键是确定一种A的必胜的模式:比如分偶数堆,每堆个数相同。
—–其实思路应该更简单一些,就是对M分情况讨论,如果M是偶数,如何分堆必胜:两堆,个数相等。
(3)对M为奇数的情况,还没有想得很清楚。
—–答案很聪明地将这个问题归结为XOR的模式,使用XOR的确能够提炼出这个问题的实质。但是有没有更直观,或者更能推导出来的数学形式呢?
——————————————————————————————————————-
4.1
今晚完成的是Task Manager CPU的曲线控制。
主要掌握了:
1. 使用GetTickCount来控制时间。
2. 对TaskManager的控制主要的观点是:
(1)首先应该想到要控制TaskManager的曲线,首先要确定其显示曲线的刷新频率,和曲线点位置的计算方法,这里记录一下是CPU在刷新周期内忙和闲时间的比率。
(2)根据上述分析就可以知道,只需要利用两个代码段:Busy和Idle就可以实现对CPU的控制。
(3)而画出曲线的方法就是控制曲线各个SPLIT上的BusyTime和IdleTime即可。使用预先计算好的数组就可以完成这样的功能了。
==========================================
_PROCESSOR_POWER_INFORMATION info;
CALLNTPowerInformation(11,NULL,0,&info,sizeof(info));
__int64 t_begin = GetCPUTickCount();
__int64 t_end = GetCPUTickCount();
double millisec = (double(t_end) -(double)t_begin)/info.CurrentMhz;
=================================================
以上这段代码是关于调用CPU内部信息的,没有完成弄好,需要引用 <powrprof.h>,还要引用powrprof.lib这个库文件。
这里有写求助帖:http://bbs.pediy.com/showthread.php?t=96926