所以,我正在解决一个问题,它基本上有以下代码:
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)和(l - an - 1)。答案将是max(maxdist / 2, max(a - 0, l - an - 1))
现在,上面的代码给出了一个WA (错误的答案),但在将最后一条语句修改为,
printf("%.10f\n",rez/2.); (去掉f),我被接受了。当我使用额外的变量f时,这个.是什么意思?为什么它会给出一个WA
发布于 2015-05-31 00:36:02
.在这两个语句中的含义如下-
让我们举个例子,如果我们写c=a/3;,那么printf("%f",c);会给出1.000000(精确到六位小数),如果你写printf("%.10f",c);,那么它会给出1.0000000000(精确到十位小数),这意味着在printf中写.会给出在.之后写的数字的有效位,如果我们写c=a/3.0,这意味着我们告诉编译器划分<代码>D10,这里隐含转换(或类型提升)发生,编译器处理<代码>D11,输出<代码>D12。因此,我们可以达到精确的答案,直到所需的有效数字。
https://stackoverflow.com/questions/30547390
复制相似问题