你已经给出了4种不同的编程。
// (1)double p,i,t
p=1, t=1
i=1 唤核袜 和激
while(i<64)
{ p=p*2
t=t+p
i++
}
// (2)
double p,i,t
i=1
for( i<64)
{ p=p*2
t=t+p
i++
}
// (3)
double p,i,t
for(i=1,t=1i<64i++)
{ p=p*2
t=t+p
}
// (4)
double i,t
while(i<64)
{ t=t+pow(2,i)
氏指 i++
}
棋盘麦子公式是:2的64次方-1,1 + 2 + 4+ 8 + ……… + 2的63次方 = 2的64次方-1 = 18446744073709551615(粒)。
在印度有一个古老的传说:舍罕王打算奖赏国际象棋的发明人——宰相:西萨·班·达依尔。国王问他想要什么,他对国王说:“陛下,请您在这张棋盘的第1个小格里,赏给我1粒麦子,在第2个小格里给2粒,第3小格给4粒,以后每一小格都比前一小格加一倍。
请您把这样摆满棋盘上所有的64格的麦粒,都赏给您的仆人吧!”国王觉得这要求太容易满足了,就命令给他这些搭扒麦粒。当人们把一袋一袋的麦子搬来开始计数时,国行睁王才发现:就是把全印度甚至全世界的麦粒全拿来,也满足不了那位宰相的要求。
棋盘麦子问题的本质:
这个故事档枝岁背后的指数爆炸也是当今经常困扰人们的问题,人们更期望解决问题的代价是随着问题规模赠大而以一种近似多项式形式增长而非指数增长的规模。
以上内容参考:百度百科-棋盘麦粒问题
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)