0

私は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);

        }
}


}

問題

4

5 に答える 5

1

試してみる/考慮すべきいくつかのこと:

  1. printf("%.4llf\n",x);回答は小数点第4位に四捨五入されるため、になり1.23456ます1.2346。これがあなたが期待していることであるかどうかの問題は明確ではありません-四捨五入せずに最初の4つの小数が必要な場合があります。
  2. jrokがコメント言ったこと:

    出力を行にする必要がある場合、入力の最後にある冗長な空の行のようなばかげたものが、Uvaでの提出WAを作成する可能性があります。たとえば、for(int i = 0; i <ARRAYSIZE; ++ i)cout << arr [i] <<'\ n'; 動作しない可能性があります。最後の行の後に'\n'を出力しないようにするには、追加のチェックが必要です。愚かなIMO、しかしそれはそれがどのようであるかです...

    個人的にはUVAでこれを経験したことはありませんが、あまり活動的ではなかったので、チェックしてみてください。

  3. 使用しないでくださいscanf(..) != EOFscanf正常に読み取られた値の数を返すため、を実行する必要がありますscanf(...) == 6

于 2012-09-02T17:35:47.137 に答える
0

epsを小さくするのに役立ちますか?

現在の0.00001では、有効数字4桁に正確なルートを正確に見つけることができない可能性があるのではないかと心配しています。

于 2012-09-02T19:18:28.670 に答える
0

1つの可能性は、p = q = r = s = t = 0であるが、u!=0の場合を忘れたことです。

また、long doubleのprintf修飾子は、llではなくLです。

于 2012-09-03T14:50:47.707 に答える
0

間違いは:

else if((fdex(inf)*fdex(sup)>0.0))
    printf("No solution\n");

私が信じているように、このfnは減少しているので、置き換えは次のようになります。

x = sup;
else if((fdex(x)>0.0)&& (x==1))
    printf("No solution\n");
于 2013-11-09T22:51:46.293 に答える
0

xでの二分探索(10,000以上の可能な値:0.0000から1.00000)とf(x)での二分探索を混同しています:f(x)が0に非常に近いからといって、f(x + 0.0001)が0に近くありません。

于 2018-10-25T22:36:57.610 に答える