某核反应堆有两类事件发生:
高能质点碰击核子时,质点被吸收,放出3个高能质点和1个低能质点;
低能质点碰击核子时,质点被吸收,放出2个高能质点和1个低能质点。
假定开始的时候(0微秒)只有一个高能质点射入核反应堆,每一微秒引起一个事件发生(对于一个事件,当前存在的所有质点都会撞击核子),试确定n微秒时高能质点和低能质点的数目。
5 2 -1
571, 209 11, 4 提示 可以使用long long int对付GNU C++,使用__int64对付VC6
这个题是一个比较简单的递推题吧我觉得,跟前面做过的什么上楼梯,骨牌都有点像,大佬别介意我胡说八道,我仅凭个人感觉。设两个数组,分别存高能质点和低能质点的数量。这个题有一个小坑,刚开始我以为每次撞击后原来的质点还在不会改变,所以我加了i-1的质点,结果WA了之后才又读题发现错误,然后改了。递归的规律一眼就可以看出来,不必赘述,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
int main()
{
int i,n;
long long int a[35],b[35];
while(scanf("%d",&n)&&n!=-1)
{
a[0]=1;b[0]=0;
a[1]=3;b[1]=1;
for(i=2;i<=33;i++)
{
a[i]=a[i-1]*3+b[i-1]*2;
b[i]=a[i-1]+b[i-1];
{
int i,n;
long long int a[35],b[35];
while(scanf("%d",&n)&&n!=-1)
{
a[0]=1;b[0]=0;
a[1]=3;b[1]=1;
for(i=2;i<=33;i++)
{
a[i]=a[i-1]*3+b[i-1]*2;
b[i]=a[i-1]+b[i-1];
}
printf("%I64d, %I64d\n",a[n],b[n]);
}
return 0;
}
printf("%I64d, %I64d\n",a[n],b[n]);
}
return 0;
}