大学数学考试题
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。如果X=10,Y=90 呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。 展开
#include <cstdio>
int main()
{
long int X=10, Y=90;
for(int k=1; k<=120; k++)//半分钟一个单位
{
if(k%2==1) Y -= X;//因为X出生半分钟后就要吃Y,尔后没1分钟要吃Y,所以永远都是奇数个半分钟的时候吃Y,又因为此时X不会增长(题目为了减小讨论的复杂度),所以直接减X数量即可。
if(k%4==0)Y *= 2;//每2分钟翻倍
if(k%6==0)X *= 2;//每3分钟翻倍,X和Y的翻倍是相互独立的,不需要另作讨论。
}
printf("%d", Y);
return 0;
}
计算X在60分内分裂数量:60/3=20(次)(10乘?不会算)
计算X每次分裂会吃Y的数量:初始值=10=N
1次 N*2-N
2次 (N*2-N)*2-(N*2-N)
3次 【(N*2-N)*2-(N*2-N)*2】-(N*2-N)*2-(N*2-N)
4次 {【(N*2-N)*2-(N*2-N)*2】-(N*2-N)*2-(N*2-N)}*2-【(N*2-N)*2-(N*2-N)*2】-(N*2-N)*2-(N*2-N)
以此类推,推算出每次会吃掉的Y的数量,Y分裂的总数减去这个数就是60分后剩余的Y的数量拉
计算Y在60分内分裂数量:60/2=30(次)(79乘?不会算)
小学生计算,看看就好
这个题还是挺有意思的,最后结果是,如果最开始时Y有89个,那么到最后60分钟的时候,没有Y剩余,因为在第39.5分钟的时候,Y就被吃没了,但是当Y最开始有90个的时候,60分钟后Y的个数是94371840个。
至于怎么做的,我是用excel拉了一下,1分钟搞定,但是你要我用笔给你算,不是不可以,是通项公式太难写了。
设t分钟后X的数量记为x(t),且设t为整数,Y的数量记为y(t),且[m]指的是向下取整运算,比如[5/3]=1,[7/2]=3
首先X肯定是不被吃的,在(t-0.5)分钟时X的数量x(t-0.5)=10*2^[(t-0.5)/3];
Y的话,周期是2分钟,且每个0.5分钟的时候(如1.5,2.5,3.5)被x吃一个,每个偶数分钟分裂一次。且前1.5分钟Y被X吃了两次,那么有:
y(1.5)=y(1)-x(1.5)y(2)=2*y(1.5)
y(2.5)=y(2)-x(2)
y(3)=y(2.5)
y(3.5)=y(3)-x(3.5)
y(4)=2*y(3.5)
于是你可以从y(2.5)到y(4)中找到规律,得到y(4)=2(y(2)-x(2)-x(3.5))
于是规律就是y(2t)=2(y(2t-2)-x(2t-2)-x(2t-0.5))
利用差比数列求和即可。
你要是想要excel的算法,私信我,不想写了
推荐于2017-07-27
2017-08-18