这个逻辑是不正确的?它似乎适用于我尝试的一切,但显然它是不对的

时间:2014-03-22 02:28:48

标签: java while-loop logic

所以我有一个关于一个走进银行的强盗的程序。他找到了N金条。他可以一次携带M条,他需要T秒才能在他的车和银行之间行走。

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

第一行是程序运行的次数/抢劫次数。 第一轮(3 2 10)的第一行,3表示N,金条的数量。图2表示M,强盗一次可以携带的条数,10表示强盗在他的汽车和银行之间行进所花费的时间。

输出
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;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

NM的倍数时,逻辑中的错误会显示,例如输入

6 3 1

生成4,但它应该生成3

问题在于这个条件:

if (M <= N)

它应该是:

if (M < N)

通过测试平等性,银行抢劫者再次回到银行,但没有什么可收集的,所以循环结束(她在银行而不是汽车 - 另一个逻辑问题)。 / p>

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

  

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