原题连接:
http://acm.hdu.edu.cn/showproblem.php?pid=2085
题意:
读一下就能理解。
思路:
这是一道递推题;
f(n)=x,y:表示n秒时有x个高能质子,y个低能质子;
f(n).x:表示n秒时高能质子的个数;
f(n).y:同理。
接下来推公式:
(1)高能质点碰击核子时,质点被吸收,放出3个高能质点和1个低能质点;
(2)低能质点碰击核子时,质点被吸收,放出2个高能质点和1个低能质点。
f(n).x=f(n-1).x*3+f(n-1).y*2;
f(n).y=f(n-1).x+f(n-1).y;(其中是用二位数组存储)
代码:
1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 int main() 7 { 8 int n,i; 9 long long a[34][2]={0};//用a[][0]存储高能质子数,a[][1]存储低能质子数; 10 a[0][0]=1;//第0秒时的情况; 11 a[0][1]=0; 12 for(i=1;i<=33;i++) 13 { 14 a[i][0]=a[i-1][0]*3+a[i-1][1]*2; 15 a[i][1]=a[i-1][0]+a[i-1][1]; 16 } 17 while(cin>>n) 18 { 19 if(n<0) 20 break; 21 printf("%lld, %lld\n",a[n][0],a[n][1]); 22 } 23 return 0; 24 }