编程之美-学习笔记.doc

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

编程之美学习笔记

游戏之乐

让CPU占有率曲线听你指挥

解析:此题的运行环境在是单核单线程的P4CPU下,如果是多核多线程的情况下,此题的答案需要进一步探讨。关键概念:CPU的占有率,是每个刷新周期内CPU占有率的统计平均值,通过在刷新周期内调节忙/闲的比例来控制这个。

解法一:利用上述概念,通过设定相应的忙/闲的时间,来到达50%,这里忙的时候,可以用个计算CPU的每个时间周期以及每个时钟周期可以执行的代码,闲的时候,可以通过Sleep(10)。这样能简单地满足条件。

解法二:解法一是通过计算,但是不同电脑的话,要有不同的计算。为了克服这个问题,利用GetTickCount()这个windows的API可以得到“系统启动到现在”的时间,具体原理跟解法一样。但这个更加准确。

解法三,如果要使CPU利用率曲线呈现正弦曲线,那么就要设定忙的时间为正弦函数,可以设定一个数组,存放一个周期内的这些满足条件的值,闲的时候为一个取样时间减忙时间,即可。

中国象棋的将帅问题

解析:要输出将帅不能碰面的所有可能情况,要求在代码中只能使用一个字节存储变量。可以构造一个3*3的逻辑坐标,用1到9来标示位置。将问题通过画图来表达,这样有利于拓展思路,让交流更流畅。让将和帅不在同一条直线上,那么根据一列数字的特点来构思。

解法一:将一个字节的变量的高4位标示A,低4位标示B,然后通过两层循环使A与B不断变化〔移位等〕,通过判断A%3与B%3的关系,把符合的值输出。

解法二:显然解法一的思路很严谨,但是相对来说比拟复杂,尤其是A与B的操作方面,如果能构造一个struct,有两个unsignedchar的4位的变量,控制起来非常简单。

structAB

{

unsignedchara:4;

unsignedcharb:4;

}i;

for(i.a=1;i.a=9;i.a++)

for(i.b=1;i.b=9;i.b++)

if(i.a%3!=i.b%3)

coutA:(int)i.aB:(int)i.bendl;

解法三:不再构造上述的结构体等,直接利用数字的性质,非常的巧妙。

chari=81;

while(i--)

{

if(i/9%3==i%9%3)continue;

coutA:i/9+1B:i%9+1endl;

}

一摞烙饼的排序

解析:显然无法用根本的排序方法对其排序,那么最直接的方法是找出N个数种最大者,将这通过两次翻转放置到最底部,然后处理N-1,N-2等,直到全部排序完,显然一共需要交换2*〔N-1〕次。具体代码如下:

voidreverse(intcakes[],intbeg,intend)

{

inttemp;

while(begend){

temp=cakes[beg];

cakes[beg++]=cakes[end];

cakes[end--]=temp;

}

}

voidcake_sort(intcakes[],intn)

{

intith,max_idx,cur_max,idx;

//find(ith+1)biggestcake

for(ith=n-1;ith=1;--ith)

{

cur_max=cakes[0];

max_idx=0;

for(idx=1;idx=ith;++idx)

{

if(cakes[idx]cur_max){

cur_max=cakes[idx];

max_idx=idx;

}

}

if(max_idx!=ith){

reverse(cakes,0,max_idx);

reverse(cakes,0,ith);

}

}

}

书上的例子是穷举所有的翻转可能,通过评估对每一个递归都做了检查,肯定能找出一个,虽然时间复杂度外表上比拟高,但是递归的开销其实比拟大,还有空间开销很大。

买书问题

解析:此题的关键是无法证明贪心算法是有效的,如果能证明有效,那么用贪心算法的效率将非常高,此题主要告诉了我们思考问题的方法,先贪心,不行的话就动态规划法,如果不存在5+3的价格高于4+

文档评论(0)

199****8042 + 关注
实名认证
内容提供者

相信自己,相信明天

1亿VIP精品文档

相关文档