求问关于 printf 、cout 与三目运算符类型转换
查看原帖
求问关于 printf 、cout 与三目运算符类型转换
1517090
DrDuck楼主2025/6/26 20:19

在第二问中,我一开始是这样输出答案的:

for (int i = 1; i <= n; i++)
{
    if (f1[i] + f2[n - i + 1] - 1 == ans)
    {
        printf("%.5lf ", g1[i] * g2[n - i + 1]
    }
    else
    {
        printf("%.5lf ", 0);
    }
}

获得了 4040 分的好成绩。

改成这样:

for (int i = 1; i <= n; i++)
{
    if (f1[i] + f2[n - i + 1] - 1 == ans)
    {
        printf("%.5lf ", g1[i] * g2[n - i + 1]
    }
    else
    {
        printf("%.5lf ", 0.0);//这里
    }
}

或者这样:

for (int i = 1; i <= n; i++)
{
    printf("%.5lf ", f1[i] + f2[n - i + 1] - 1 == ans ? g1[i] * g2[n - i + 1] / sum : 0);
}

或者这样:

for (int i = 1; i <= n; i++)
{
    if (f1[i] + f2[n - i + 1] - 1 == ans)//i 可能成为 LDS
    {
        printf("%.5lf ", g1[i] * g2[n - i + 1] / sum);//乘法原理
    }
    else
    {
        cout << fixed << setprecision(5) << 0 << ' ';
    }
}

都可以 AC。

顺带一提,我用 4040 分的输出方法本地(Windows 系统)能跑过 LibreOJ 上的第 1717 个点(挑了个结果带 00 的数据下下来),然而交到 LibreOJ 上过不了。

所以这里的三目运算符是起到了把 int 转换为了 double 的作用吗?对于 printf 函数,做 printf("%.5lf ", 0) 操作,一个是转换为 double,一个原样输出(猜的),是由于环境原因吗?还是别的原因?

还有,如果是在 CCF 的评测机上,这行代码到底会输出什么?

2025/6/26 20:19
加载中...