本文主要是介绍HDOJ 2085,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
核反应堆
Problem Description
某核反应堆有两类事件发生:
高能质点碰击核子时,质点被吸收,放出3个高能质点和1个低能质点;
低能质点碰击核子时,质点被吸收,放出2个高能质点和1个低能质点。
假定开始的时候(0微秒)只有一个高能质点射入核反应堆,每一微秒引起一个事件发生(对于一个事件,当前存在的所有质点都会撞击核子),试确定n微秒时高能质点和低能质点的数目。
Input
输入含有一些整数n(0≤n≤33),以微秒为单位,若n为-1表示处理结束。
Output
分别输出n微秒时刻高能质点和低能质点的数量,高能质点与低能质点数量之间以逗号空格分隔。每个输出占一行。
Sample Input
5 2
-1
Sample Output
571, 209
11, 4
提示
可以使用long long int对付GNU C++,使用__int64对付VC6
Source
2006/1/15 ACM程序设计期末考试
解题思路
根据题设,假设时间为n时,高能数量为h(n),低能数量为l(n),可以写出递推公式:
h(n)=3*h(n-1)+2*l(n-1)
l(n)=h(n-1)+l(n-1)
注意数据类型即可
AC
#include<stdio.h>
#include<iostream>
using namespace std;
int main() {long long int h[40], l[40];h[0] = 1;l[0] = 0;for (int i = 1; i <= 33; i++) {h[i] = 3 * h[i - 1] + 2 * l[i - 1];l[i] = h[i - 1] + l[i - 1];}int n;while (scanf("%d", &n) != EOF && n != -1) {cout << h[n] << ',' << l[n] << endl;}
}
这篇关于HDOJ 2085的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!