传说在很久以前,印度有个叫塞萨的人,为了能使国王忘掉战争,精心设计了一种游戏(国际象棋)献给国王。国王对这种游戏非常满意,决定赏赐塞萨。国王问塞萨需要什么,塞萨指着象棋盘上的小格子说:“就按照棋盘上的格子数,在第一个小格内赏我1粒麦子,在第二个小格内赏我2粒麦子,第三个小格内赏4粒,照此下去,每一个小格内的麦子都比前一个小格内的麦子加一倍。陛下,把这样摆满棋盘所有64格的麦粒,都赏给我吧。”国王听后不加思索就满口答应了塞萨的要求。但是经过大臣们计算发现,就是把全国一年收获的小麦都给塞萨,也远远不够。国王这才明白,塞萨要的,是国王放弃战争,发展生产,改善人民生活。现在我们把棋盘稍微扩大一下,变成100个格子,请你编程计算从第K格至第M格共有多少粒麦粒,由于答案很大,为了方便起见,你只要求出最后的3位数字就可以了
输入
输入数据仅有一行包含两个用空格隔开的正整数K和M,其中4 ≤ K<M ≤100。
输出
输出数据仅有一行包含一个整数表示共有多少粒麦粒,只要求输出最后的3位数字。
样例输入
4 10
样例输出
016
Pascal 印度国王的棋盘
答案:2 悬赏:0 手机版
解决时间 2021-02-16 05:50
- 提问者网友:爱了却不能说
- 2021-02-16 01:34
最佳答案
- 五星知识达人网友:渊鱼
- 2021-02-16 03:13
完成要求的程序如下:
var k,m,i,t,s:integer;
begin
t:=1; readln(k,m);
for i:=2 to k-1 do
t:=2*t mod 1000;
for i:=k to m do
begin
t:=t+t;
s:=(s+t)mod 1000;
end;
if s<100 then write(0);
if s<10 then write(0);
writeln(s);
end.
var k,m,i,t,s:integer;
begin
t:=1; readln(k,m);
for i:=2 to k-1 do
t:=2*t mod 1000;
for i:=k to m do
begin
t:=t+t;
s:=(s+t)mod 1000;
end;
if s<100 then write(0);
if s<10 then write(0);
writeln(s);
end.
全部回答
- 1楼网友:鱼芗
- 2021-02-16 04:08
你把所有的数先计算好现放到数组中,但是2^100远远超过了longint所能存放的最大值。
这个程序是否计算m..n格子中所有麦粒总和的最后三位数?如果是的话,修改后的程序如下:
var
a,i,n,m,h:integer;
begin
readln(m,n);
a:=1;
for i:=2 to m-1 do
a:=a*2 mod 1000;
for i:=m to n do
begin
h:=(h+a) mod 1000;
a:=a*2 mod 1000;
end;
writeln(h);
end.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯