什么是''输出意味着什么?

时间:2015-05-30 14:35:09

标签: c++ algorithm

所以,我正在解决一个基本上有以下代码的问题:

int rez,arr[10000],n,l,diff;
float f;
int main (void)
{
    cin>>n>>l;
    for (int i = 0; i < n; i++ )
    {
        cin>>arr[i];
    }
    sort(arr,arr+n);
    rez = 2*max(arr[0],l-arr[n-1]);
    for ( int i = 0; i < n-1; i++ )
    {
        rez = max(rez, arr[i+1]-arr[i]);
    }
    f = rez/2.0;
    printf("%.10f\n",f);
    return 0;
}

以上是以下问题的代码:

http://codeforces.com/problemset/problem/492/B

逻辑:按非递减顺序对灯笼进行排序。然后我们需要找到两个相邻灯笼之间的最大距离,让它成为maxdist。此外,我们需要考虑街道边界并计算从外部灯笼到街道边界的距离,它将是(a [0] - 0)和(l - a [n - 1])。答案是max(maxdist / 2,max(a [0] - 0,l - a [n - 1]))

现在,上面的代码给出了一个WA(错误答案),但修改了最后一个语句,

printf("%.10f\n",rez/2.);(并删除f),我接受了。这个.意味着什么?当我使用额外的变量f时,它为什么会给WA?

1 个答案:

答案 0 :(得分:1)

两个陈述中.的含义如下 -

让我们举个例子int a=4; float c;如果我们写c=a/3;,那么printf("%f",c);会给1.000000(精确到小数点后六位),如果你写printf("%.10f",c);那么它会给1.0000000000(精确到小数点后十位),这意味着在printf中写.会给.之后写的数字精确的数字提供精确数字。如果我们写c=a/3.0这意味着我们告诉编译器划分int by float并在此处进行转换(或类型提升)并且编译器处理int a as float并提供输出1.333333。因此,我们可以达到精确的答案,直到重新获得重要数字。