有一个养鸭专业户,赶了一大群鸭子出去卖。他每经过一个村庄,卖出所赶鸭子的一半再多一只,这样他经过七个村庄后,还剩下两只鸭子,编程打印输出他每经过一个村庄后卖出多少只鸭子?剩下多少只鸭子?
var
a:array[0..7] of longint;
i:longint;
begin
a[7] := 2;
for i := 7 downto 1 do a[i-1] := 2*(a[i]+1);
for i := 1 to 7 do writeln('No.',i,' : ',a[i-1]-a[i]:5,a[i]:5);
end.
我点评一下,数组递推我估计在写法上应该难度不大,唯独一个可能比较难想的是,卖出的数量是卖之前数量的一半多一个,算了,列个表格
卖之前 | 卖出 | 卖之后 |
n | 1/2*(n)+1 | 1/2*(n)-1 |
2*n+1 | 管他那! | n |
... | ... | ... |
把n代换为2*n+1,卖之后的数量就会变成n,这一步,估计数学底子不好的同学要想不通了~
所以卖之前的数量是卖之后数量的2*n+1,这就是我们数组递推的依据!