私はACMUvaWebページからこの問題に取り組んでおり、フォーラムからのすべての入力を試しましたが、完全に機能します。それは私に「間違った答え」を与え続けます、そして私は英語を話さないので、多分私は何かを忘れています。たぶん、ここの誰かがこの解決策を提出したのでしょう。これは私がこの問題から行った5回目の提出であり、常に間違っています。どうもありがとう。編集:
方程式を解きます:
p * ex + q * sin(x)+ r * cos(x)+ s * tan(x)+ t * x2 + u = 0
ここで、0 <= x<=1です。
入力
入力は複数のテストケースで構成され、EOFで終了します。各テストケースは、p、q、r、s、t、uの6つの整数で構成されます(0 <= p、r<=20および-20<=q、s、t <= 0)。入力ファイルには最大2100行が含まれます。
出力
入力のセットごとに、xの値を含む行、小数点以下4桁までの修正、または文字列「Nosolution」のいずれか該当する方が必要です。
#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);
}
}
}