求精妙的算法
本人第一次来论坛,看了几个帖子,其中有一个贴子很让我感兴趣,题目是《12个球的程序.....》,连接是https://www.bccn.net/Article/kfyy/cyy/jszl/200804/7191.html。那个帖子给出的代码非常清晰易懂,非常好的模拟了实际问题。但美中不足的是并没有给出称量的算法这个题目我在中学时期把它作为数学题目做过。我记得有2种大同小异的方案,那时我是用的穷举法得到答案,其实一开始就可以把所有的情况缩小到很小的范围。。我给出其中一个方法
12个球的问题.rar
(2.29 KB)
。称量过程在代码中。言归正传,我发这个帖子的目的是想收集一些比较漂亮的算法,并不一定要完整的代码,几个函数或者直接用语言描述就可以了。算法能解决的问题各个方面都可以,最好和数学有点关系。也可以给出c语言编程时候的一些技巧。下面自己先发一个在其他论坛学到的算法来作为例子,(原帖http://bbs.)
unsigned fun(unsigned int x)
{ /******** 功能:计算x(x必须是32位的数,否则要修改下面的常数)的二进制位中1的个数 ********/
const unsigned MASK1 = 0x55555555;
const unsigned MASK2 = 0x33333333;
const unsigned MASK4 = 0x0f0f0f0f;
const unsigned MASK8 = 0x00ff00ff;
const unsigned MASK16 = 0x0000ffff;
x = (x & MASK1 ) + (x >> 1 & MASK1 );
x = (x & MASK2 ) + (x >> 2 & MASK2 );
x = (x & MASK4 ) + (x >> 4 & MASK4 );
x = (x & MASK8 ) + (x >> 8 & MASK8 );
x = (x & MASK16) + (x >> 16 & MASK16);
return x;
}