【问题标题】:Is this logic incorrect? It seems to work for everything I try but apparently it is not right这个逻辑不正确吗?它似乎对我尝试的一切都有效,但显然这是不对的
【发布时间】:2014-03-22 02:28:47
【问题描述】:

所以我有一个关于一个抢劫银行的节目。他找到了 N 根金条。他一次可以携带 M 根金条,而且他需要 T 秒才能从汽车到银行。

输入
3
3 2 10
35 68 42
25 70 1

第一行是程序将运行多少次/有多少抢劫。 第一次运行的第一行(3 2 10),3代表N,金条的数量。 2 代表 M,劫匪一次可以携带的酒吧数量,10 代表 T,劫匪从他的汽车和银行之间行驶的时间。

输出
30
42
1

这是我的逻辑,但根据这个程序的评分者,它没有通过他们的测试数据(他们有不同的输入)。我尝试了许多数字组合,但答案仍然正确。有谁看到这有什么问题?

/* NOTE:   
1 <= First line of input <= 10    
1 <= N <= 100    
1 <= M <= 100    
1 <= T <= 100  */

public class Stealing
{
    public static void main(String[] args) throws IOException
    {
        Scanner scan = new Scanner (new File ("stealing.dat"));
        int numRuns = scan.nextInt();
        int time = 0;
        for (int i = 0; i < numRuns; i++)
        {
            int N = scan.nextInt();
            int M = scan.nextInt();
            int T = scan.nextInt();
            if (M >= N)
                time = T;
            else
            {
                while (N > 0)
                {
                    if (M <= N)
                        time += (2*T);
                    else
                        time += T;
                    N -= M;
                }
            }
            out.println(time);
            time = 0;
        }
    }
}

【问题讨论】:

  • 您无法防止错误输入,例如 M 的负数,这将导致无限循环
  • @Bohemian 我认为这不是问题,请参阅源代码顶部的注释。
  • 如果你使用M &gt;= NT 时间,那么其他逻辑应该是M &lt; N 不是吗?还有time += (2*T); 为什么是2? T独立于Gold...只是Vault和Car之间的时间。
  • @bonCodigo M 是他/她可以携带的金条数量,所以如果它大于或等于可用金条的数量,他/她应该只需要从金库到他/她的车。时间+=(2*T) 因为如果条数超过他/她可以携带的数量,他/她将不得不返回保险库,因此 T 乘以 2。 T上车,T下车。你是对的,它是 M
  • @bonCodigo 别管 M

标签: java while-loop logic


【解决方案1】:

NM 的倍数时,逻辑中的错误就会出现,例如输入

6 3 1

产生4,但它应该产生3

问题在于这种情况:

if (M <= N)

应该是:

if (M < N)

通过测试相等性,银行劫匪又回到银行,但没有任何东西可以收集,所以循环结束(她在银行,而不是在汽车 - 另一个逻辑问题)。

如果我这样做,我将使用循环 - 我将使用纯数值方法(读者练习,但将鼠标悬停在以下内容上以查看我的解决方案):

int time = (N / M) * 2 * T + (N % M == 0 ? -T : T);

【讨论】:

  • 谢谢,这解决了问题。很好的解释,但只是出于好奇,如果没有循环,您将如何执行此操作?
  • @Bohemian 现在这是有道理的:你的悬停已经练习了我的第一个表达:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多