我正在从 ACM Uva 网页上解决这个问题,并且我已经尝试了来自论坛的每一个输入,并且效果很好。它一直给我“错误的答案”,而且由于我不是说英语的人,也许我忘记了一些东西。也许这里有人提交了这个解决方案。这是我从这个问题中提交的第 5 次提交,而且总是错误的。非常感谢。编辑:
求解方程:
p*ex + q*sin(x) + r*cos(x) + s*tan(x) + t*x2 + u = 0
其中 0 <= x <= 1。
输入
输入由多个测试用例组成,并由 EOF 终止。每个测试用例在一行中包含 6 个整数:p、q、r、s、t 和 u(其中 0 <= p,r <= 20 和 -20 <= q,s,t <= 0)。输入文件中最多有 2100 行。
输出
对于每组输入,应该有一行包含 x 的值,正确至小数点后 4 位,或字符串“No solution”,以适用者为准。
#include <math.h>
#include <stdio.h>
#define eps 0.00001
int p, q, r,s,t,u;
long double fdex(long double x)
{
long double res=p*exp(-x)+ q*sin(x)+r*cos(x)+s*tan(x)+t*x*x+u;
return res;
}
int main()
{
freopen("input.txt","rt",stdin);
freopen("output.txt","wt",stdout);
long double x,inf,sup,fx;
while(scanf("%d %d %d %d %d %d\n",&p, &q, &r,&s,&t,&u)!=EOF)
{
long double x1;
inf=0.0;
sup=1.0;
if (p==0 && q==0 && r==0 && s==0 && t==0)
printf("0.0000\n");
else if((fdex(inf)*fdex(sup)>0.0))
printf("No solution\n");
else
{
do
{
x=(inf+sup)/2.0;
fx=fdex(x);
if(fx>eps)
{
inf=x;
}
else if(fx<-eps)
{
sup=x;
}
}while( fx<-eps || fx>eps);
printf("%.4llf\n",x);
}
}
}