我需要帮助解决这个问题。我已经这样做了,但是有一个错误,我无法识别哪个错误。
假设您有一个可以分成更小球的球。这些球的大小从 1 开始为整数。大小为 W>1 的球将每 W^2 分钟产生另一个大小为 (W−1) 的球。例如,每 9 分钟,一个 3 号球就会组装另一个 2 号球。生产从球被制造出来的那一刻开始。尺寸为 1 的球太小,无法创建其他球。此外,作为安全预防措施,尺寸为 W 的球仅限于组装 W 个较小的球。
输入格式
输入将以整数 Z 开头,表示测试用例的数量。每个案例都由一行包含一个整数 W 组成,表示初始球的大小。
限制 1≤Z≤1000 1≤W≤20
输出格式
对于每个测试用例,输出一行包含一对整数 X 和 Y,以空格分隔。整数X表示在允许球尽可能多地复制后剩下的球总数。整数 Y 将表示球完成复制所需的分钟数。结果的顺序必须遵循提供测试用例的顺序。
示例输入
2
1
3
示例输出
1 0
10 35
说明
在第一种情况下,初始尺寸为 1 的球无法复制。最后有 1 个球,达到该数字所需的时间为 0 分钟。在第二种情况下,原始 3 号球会产生 2 号球,然后再产生更多 1 号球。第一个球需要 9 分钟来创建一个较小的机器人,然后在第二个球之前再经过 9 分钟,依此类推。每个 2 号球一生成就开始组装更小的球。复制过程完成后有 10 个球,总共需要 35 分钟。
这是我的第一次尝试。
public class Solution {
private static Scanner STDIN = new Scanner(System.in);
public static void main(String[] args) {
// TODO Auto-generated method stub
int t = STDIN.nextInt();
for(int k = 0; k<t; k++){
int n = STDIN.nextInt();
int factor = 1;
int balls = 1;
int time = 0;
for(int i=n; i>1; i--){
factor*=i;
balls+=factor;
time+=Math.pow(i,3);
}
System.out.println(balls+" "+time);
}
}
}
最佳答案
我认为如果球的数量超过整数范围,您的解决方案可能会失败。尝试对 factor
、balls
、type
使用 long
类型。
关于java - 这个算法有什么问题呢? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33292808/