1.问题提出
相传现在流行的国际象棋时古印度舍罕王(Shirham)的宰相达依尔(Dahir)发明的。舍罕王十分喜爱象棋,决定让宰相自己要求得到什么赏赐。这么聪明的宰相指着8*8共64格的香气盘说,陛下,请您赏给我一些麦子吧,就在棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格逗比前一格增加一倍,依此放完棋盘上的64格,我就感恩不尽粒。
舍罕王让人扛来一袋麦子,他要兑现它的许诺。
请问,国王能兑现它的许诺吗?供药多少个麦子赏赐他的宰相?合多少立方米(1立方米麦子约1.42e8粒)?如果把这些麦子堆成一个正圆锥形的麦堆,这麦堆约有多高?
2.求解要点
这是一个典型的等比数列求和问题。
第1格1粒,第2格2粒,第3格4=2²粒,......,第i格位2的i-1次方粒,于是总粒数为s=1+2+2²+2³+...。
求出总粒数位s,折合为v立方米,则有:v=s/1.42e8。
设正圆锥形的卖堆得底半径为r,高为h,则有:
v=(1/3)πr²h,h=√3*r
3.程序实现
//
// main.c
// 1_舍罕王的失算
//
// Created by 万齐鹣 on 15/5/30.
// Copyright (c) 2015年 万齐鹣. All rights reserved.
//
#include <stdio.h>
#include <math.h>
int main(int argc, const char * argv[])
{
double t,s,v,h;
int i,n;
printf("请输入格数:");
scanf("%d",&n); // 输入格数
t = 1;
s = 1;
for (i=2; i<=n; i++) {
t = t*2; // t 为第i格的麦粒数
s = s+t; // s 求所有格的麦粒和
}
v = s/1.42e8;
h = v*9/3.1415926;
h = pow(h, 1.0/3); // 求出麦堆得高
printf("总麦粒数约为:%.3e\n", s);
printf("折合体积约为:%.0f立方米\n", v);
printf("正圆锥麦堆高约为:%.0f米\n", h);
}
失算的另一名题——买马钉
某人以156卢布卖出一匹马。成交后,买主后悔并向卖主说:“我上当了,你的马不值这个价钱。”
这时卖主提出另一笔交易:“你既然嫌马太贵,那么你买马掌钉好了,这匹马就白送你。每个马掌要钉6个钉,共需24格钉。钉的价格如下方法计算:第1格钉1格包卢斯卡(俄罗斯货币单位,相当于1/4个卢比),第2个钉2个包卢斯卡,第3个钉4格包卢斯卡,...,以后每个钉的价格为前一个钉的2倍,直到第24个。”
买主听后暗想,钉子如此便宜,马还可白得,欣然同意。
问:买主买马钉要花多少卢布(1卢布等于100卢比,即400包卢斯卡)?
//
// main.c
// 1_1买马钉
//
// Created by 万齐鹣 on 15/5/30.
// Copyright (c) 2015年 万齐鹣. All rights reserved.
//
#include <stdio.h>
int main(int argc, const char * argv[])
{
double t,s;
int i,n;
printf("请输入n:");
scanf("%d",&n);
t=1;s=1;
for (i=2;i<=n; i++) {
t=t*2;
s=s+t;
}
printf("共需话费约%.4f卢布。", s/400);
return 0;
}