所以,我正在解决一个基本上有以下代码的问题:
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?
答案 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
。因此,我们可以达到精确的答案,直到重新获得重要数字。