#include <iostream> using namespace std; int main() { int T,n; double k1,k2,k,x,sum; cin>>T; for(int cas=1;cas<=T;cas++) { sum=0; cin>>n>>k1>>k2>>k; double h=k1+k2; while(n--) { cin>>x; sum=sum+x; } int t=0; if(sum>k) { cout<<"Case #"<<cas<<": "<<"0"<<endl; continue; } if(h<1&&h>-1) { cout<<"Case #"<<cas<<": "<<"inf"<<endl; continue; } while(sum<=k) { t++; sum=sum*h; } cout<<"Case #"<<cas<<": "<<t<<endl; } return 0; }
问题描述 :
输入:
[Technical Specification]
T <= 100
1 <= n <= 10000
-100 <= k1, k2 <= 100
1 <= k <= 10 ^ 18
1 <= ai <= 1000(1 <= i <= n)
输出:
[Technical Specification]
T <= 100
1 <= n <= 10000
-100 <= k1, k2 <= 100
1 <= k <= 10 ^ 18
1 <= ai <= 1000(1 <= i <= n)
样例输入:
2
5 1 1 10
1 1 1 1 1
5 1 1 500
1 1 1 1 1
样例输出:
Case #1: 2 Case #2: 7
解题思路:
把n个器官的和相加 为sum 有题意可知 sum(i+1)=(k1+k2)*sum(i);
注意:(1)、k1+k2 可以为负数的 因为每次相乘则负负得正 也能够使得sum>k , 另外k k1 k2 应该是double
(2)、如果一开始的sum是大于k的,就输出0,然后continue;
(3)、如果-1<k1+k2<1是满足的,那么就永远都不可能使sum 的值大于k,那么输出inf,continue;
(4)、通过循环我们统计循环次数就可以知道要多少天才能大于k;
原文:http://www.cnblogs.com/xinxiangqing/p/5004787.html