C# 试图在这项具体任务上对大数字进行四舍五入

C# 试图在这项具体任务上对大数字进行四舍五入,c#,rounding,C#,Rounding,我想解决一个难题: 问题是我在取整方面遇到了问题,我不确定问题出在哪里,在执行操作之前应该取整多少数字。 因此,这里是前4个测试用例的输入(第一个数字是第一台打印机打印页面的秒数,第二个数字与第二台打印机相同,以及要打印的页面数): 15 15 46491255 5900 13309 60565 13375408735 800258413010370 以下是我的答案: 348684413/247579340/183808792/425305709 以下是正确答案: 348684420/2475

我想解决一个难题:

问题是我在取整方面遇到了问题,我不确定问题出在哪里,在执行操作之前应该取整多少数字。 因此,这里是前4个测试用例的输入(第一个数字是第一台打印机打印页面的秒数,第二个数字与第二台打印机相同,以及要打印的页面数):

15 15 46491255

5900 13309 60565

13375408735

800258413010370

以下是我的答案: 348684413/247579340/183808792/425305709

以下是正确答案: 348684420/247581700/183808794/425332875

这是我的密码:

using System;

public class Test
{
    public static void Main()
    {
        int n = int.Parse(Console.ReadLine());

        string[] container = new string[3];
        double[] results = new double[n];
        double printer1, printer2, pages;
        double x, y;

        for (int i = 0; i < n; i++)
        {
            x = 0;
            y = 0;
            container = Console.ReadLine().Split(' ');

            printer1 = double.Parse(container[0]);
            printer2 = double.Parse(container[1]);
            pages = double.Parse(container[2]);

            x = (1 / printer1) + (1 / printer2);
            y = Math.Round((pages / x), MidpointRounding.AwayFromZero);


            results[i] = y;
        }
        for (int i = 0; i < n; i++)
        {
            Console.Write(results[i] + " ");
        }

    }
}
使用系统;
公开课考试
{
公共静态void Main()
{
int n=int.Parse(Console.ReadLine());
字符串[]容器=新字符串[3];
double[]结果=新的double[n];
双面打印机1,打印机2,页数;
双x,y;
对于(int i=0;i
我假设您不是在寻找针对指定问题的完整代码答案,因为您所指的站点通常面向希望了解如何解决此类问题的用户

你的问题不在答案的四舍五入之内。相反,它在您的算法中

如果你对照网站上给出的例子检查你的算法,你会发现你的算法不起作用

对于“3 5 4”的第二个示例,您的程序给出7.5(四舍五入之前)。无论你从哪一个方向打7.5分,你都不会得到9分的正确答案


printer1或printer2最终将成为长极,具体取决于输入数据,并且该打印机将以整数页数结束(打印机无法共享要打印的页面)--这里根本不涉及舍入。

我假设您不是在寻找指定问题的完整代码答案,因为您所指的站点通常面向希望学习如何解决此类问题的人

你的问题不在答案的四舍五入之内。相反,它在您的算法中

如果你对照网站上给出的例子检查你的算法,你会发现你的算法不起作用

对于“3 5 4”的第二个示例,您的程序给出7.5(四舍五入之前)。无论你从哪一个方向打7.5分,你都不会得到9分的正确答案


printer1或printer2最终将成为长极,具体取决于输入数据,并且该打印机将以整数页数结束(打印机无法共享要打印的页面)--这里根本不涉及舍入。

我假设您不是在寻找指定问题的完整代码答案,因为您所指的站点通常面向希望学习如何解决此类问题的人

你的问题不在答案的四舍五入之内。相反,它在您的算法中

如果你对照网站上给出的例子检查你的算法,你会发现你的算法不起作用

对于“3 5 4”的第二个示例,您的程序给出7.5(四舍五入之前)。无论你从哪一个方向打7.5分,你都不会得到9分的正确答案


printer1或printer2最终将成为长极,具体取决于输入数据,并且该打印机将以整数页数结束(打印机无法共享要打印的页面)--这里根本不涉及舍入。

我假设您不是在寻找指定问题的完整代码答案,因为您所指的站点通常面向希望学习如何解决此类问题的人

你的问题不在答案的四舍五入之内。相反,它在您的算法中

如果你对照网站上给出的例子检查你的算法,你会发现你的算法不起作用

对于“3 5 4”的第二个示例,您的程序给出7.5(四舍五入之前)。无论你从哪一个方向打7.5分,你都不会得到9分的正确答案


printer1或printer2最终将成为长极,具体取决于输入数据,并且该打印机将以整数页数结束(打印机无法共享要打印的页面)——这里根本不涉及舍入。

代码有两个问题:

小问题是您总是希望向上取整到下一个整数,但这不是
所做的。您想使用

但是主要的问题是代码没有考虑到打印机只能打印整页。想象一个极端的例子12 40 6:

| Time | Printer 1 | Printer 2 | Total | | (sec)| (pages) | (pages) | (pages) | +------------------------------+---------| | 12 | 1 | 0.3 | 1.3 | | 24 | 2 | 0.6 | 2.6 | | 36 | 3 | 0.9 | 3.9 | | 40 | 3.333 | 1.0 | 4.333 | | 48* | 4 | 1.2 | 5.2 | | 60 | 4 | 1.667 | 5.667 | | 80 | 4 | 2 | 6 | |时间|打印机1 |打印机2 |总计| |(节)|(页数)|(页数)|(页数)| +------------------------------+---------| | 12 | 1 | 0.3 | 1.3 | | 24 | 2 | 0.6 | 2.6 | | 36 | 3 | 0.9 | 3.9 | | 40 | 3.333 | 1.0 | 4.333 | | 48* | 4 | 1.2 | 5.2 | | 60 | 4 | 1.667 | 5.667 | | 80 | 4 | 2 | 6 | 请注意48秒后发生的情况:第一台打印机已完成4页,而另一台仍在打印第二页。理想情况下,根据代码,第一台打印机可以通过用第二台打印机的剩余部分“帮助”较慢的打印机来加快速度 | Time | Printer 1 | Printer 2 | Total | | (sec)| (pages) | (pages) | (pages) | +------------------------------+---------| | 12 | 1 | 0.3 | 1.3 | | 24 | 2 | 0.6 | 2.6 | | 36 | 3 | 0.9 | 3.9 | | 40* | 3.333 | 1 | 4.333 | | 48 | 4 | 1 | 5 | | 60 | 5 | 1 | 6 |
 double printedPages1 = Math.Ceiling((printer2 * pages) / (printer1 + printer2));
  double printedPages2 = Math.Ceiling((printer1 * pages) / (printer1 + printer2));
        if (printedPages1 * printer1 < printedPages2 * printer2)
        {
            time = Math.Ceiling(printedPages1 * printer1);
        }
        else
        {
            time = Math.Ceiling(printedPages2 * printer2);
        }


        results[i] = time; // I add the result(time) in an array