链接:http://acm.hdu.edu.cn/showproblem.php?pid=4525
题目中文,不做解释了
把所有公式累加之后会发现得到一个等比数列的递推公式:an=a1*q^(n-1),a1是初始所有器官的总重量,q=(k1+k2),
如果一开始a1就比k大的话输出0,q为1或-1或0,a1为0的话输出inf,其他的就算哪天超过了,应该可以用对数直接算,为负的情况要特判下,这样应该能更快。
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int cas,i,j,n;
double a,k1,k2,k,q,x;
scanf("%d",&cas);
for(j=1;j<=cas;j++)
{
scanf("%d%lf%lf%lf",&n,&k1,&k2,&k);
q=k1+k2;
a=0;
while(n--)
{
scanf("%lf",&x);
a+=x;
}
printf("Case #%d: ",j);
if(a>k)
printf("0\n");
else if(q==1||q==-1||q==0||a==0)
printf("inf\n");
else
{
for(i=1;;i++)
{
a*=q;
if(a>k)
{
printf("%d\n",i);
break;
}
}
}
}
return 0;
}
本文探讨了一种解决特定等比数列问题的高效算法,通过累加公式推导出等比数列的递推公式,并详细解释了特殊情况的处理方式。包括如何在初始条件下判断输出结果为0、无穷大或使用对数计算,以及如何快速找出超过给定阈值所需的迭代次数。
3388

被折叠的 条评论
为什么被折叠?



