几个算法举例。

如何计算某个数x是否是2的幂次方?

因为若y为2的幂,则为x=2^y。在2进制位的表示中在第y+1位上为1,其余为0.则(x-1)&x=0。即可以得出x是否为2的幂次方。


百鸡问题:若公鸡价钱为5,母鸡价钱为3,小鸡价钱为1/3,则100元买100只鸡,问分别为多少?

通常得出两组等式: (1) 5x+3y+1/3z=100  (2) x+y+z=100

解法:由于x、y、z均为正整数,则可用(1)(2)等式销去z项得 (3) 14x+8y=200  => (4) (7/4)x+y=25。 x的取值集{0、4、8、12}。则可通过枚举法得出x,y,z各为多少。


求和问题:对下列等式求和?

(1) i为外层循环,j为内层循环, 循环次数为20*4+1 = 81

(2) j为外层循环,i为内层循环, 循环次数为3*21+1 = 64

明显第二次要计算效率最高。


如何不用sizeof等函数,如何求int型的大小?

声明一个int数组,然后用 (&a[n]-a)/n-1


如何在一个8*8的矩阵中,采用象棋中的马走日字的形式遍历整个矩阵,但是不能走重复格子。找出可行解即可。

思路:采用深度优先算法,但是加入相关扩展的限制条件。每一次判断下一步格子时,按照以下原则:

1.若当前还没有到达的节点中能够跳到下一个可到达节点的个数越多,说明优先级越低。按照优先级排序后,选取优先级最低的节点作为下一步到达的节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值