-1

T は、このコードで切り捨てられた整数除算をどのように回避しますか? 私の並べ替えられた配列は1 1 1 1 1 1であるため、a[0] = 1 および a[n] は 1 / 2 = 0.5 である必要があります。

int main()
{
    long long n,w;
    scanf("%lld %lld", &n, &w);
    long long arr[2*n];
    for(long long i = 0; i < 2 * n; i++)
    {
      scanf("%lld", &arr[i]);
    }
    sort(arr,arr+2*n);

    long long a = arr[0];
    long long b = (float)(arr[n]/2); // <--- this part of code
    cout << " a is " << a << endl;
    cout << " b is " << b << endl;
    long long m = min(a,b);
    cout << " m is " << m << endl;
    long long and = min(m * n + m * 2LL * n, w);
    printf("%lld", ans);
    return 0;
}
4

3 に答える 3

1

変数はb整数であるため、浮動小数点数を保持できません。への変換が遅すぎるだけでなくfloat、結果を整数変数に格納します。整数の結果以外の何かを期待できますか?

float b = ((float)arr[n])/2.f;

より良い結果が得られます。

于 2016-02-15T11:05:16.027 に答える