题目描述:
核反应堆里有
α
\alpha
α和
β
\beta
β两种粒子,每秒钟内一个
α
\alpha
α粒子变成3个
β
\beta
β粒子,而一个
β
\beta
β粒子可以变成1个
α
\alpha
α粒子和2个
β
\beta
β粒子。若在t=0时刻只有一个
α
\alpha
α粒子,求t时刻
α
\alpha
α粒子数和
β
\beta
β粒子数。
递推公式
n0=1,m0=0;
ni=mi-1;
mi=3ni-1+2mi-1;
公式
ni=[pow(3,t)+3pow(-1,t)]/4;
mi=[pow(3,t+1)-3pow(-1,t)]/4;
#include<stdio.h>
#include<math.h>
int main()
{
int n[100],m[100];
int t,i;
printf("please input a num of t:");
scanf("%d",&t);
//递推法
n[0]=1;
m[0]=0;
for(i=1;i<=t;i++){
n[i]=m[i-1];
m[i]=3*n[i-1]+2*m[i-1];
}
printf("n[t] = %d m[t] = %d\n",n[t],m[t]);
//公式法
float ml,nl;
ml=pow(3,t+1)-3*pow(-1,t);
nl=pow(3,t)+3*pow(-1,t);
nl=nl/4;
ml=ml/4;
printf("nl = %.0f ml = %.0f \n",nl,ml);
return 0;
}
这种方法也使用斐波那契数
#include<stdio.h>
#include<math.h>
int main()
{
int t;
printf("please input a num of t:");
while(scanf("%d",&t)!=EOF)
{
float ansa=(1+sqrt(5))/2;
float ansb=(1-sqrt(5))/2;
float answer=(1/sqrt(5))*pow(ansa,t)-(1/sqrt(5))*pow(ansb,t);
printf("%.0f\n",answer);
printf("please input a num of t:");
}
return 0;
}
以前也知道有公式但不知所以然,今天算是有所收获了!!!加油加油!!!