【发布时间】: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 >= N为T时间,那么其他逻辑应该是M < N不是吗?还有time += (2*T);为什么是2? T独立于Gold...只是Vault和Car之间的时间。 -
@bonCodigo M 是他/她可以携带的金条数量,所以如果它大于或等于可用金条的数量,他/她应该只需要从金库到他/她的车。时间+=(2*T) 因为如果条数超过他/她可以携带的数量,他/她将不得不返回保险库,因此 T 乘以 2。 T上车,T下车。你是对的,它是 M
-
@bonCodigo 别管 M
标签: java while-loop logic