所以我有一个关于一个走进银行的强盗的程序。他找到了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;
}
}
}
答案 0 :(得分:2)
当N
是M
的倍数时,逻辑中的错误会显示,例如输入
6 3 1
生成4
,但它应该生成3
。
问题在于这个条件:
if (M <= N)
它应该是:
if (M < N)
通过测试平等性,银行抢劫者再次回到银行,但没有什么可收集的,所以循环结束(她在银行而不是汽车 - 另一个逻辑问题)。 / p>
如果我这样做,我会不使用循环 - 我会使用纯粹的数值方法(读者练习,但将鼠标悬停在下面以查看我的解决方案):
int time = (N / M) * 2 * T + (N % M == 0 ? -T : T);