java - 这个算法有什么问题呢? ( java )

标签 java for-loop

我需要帮助解决这个问题。我已经这样做了,但是有一个错误,我无法识别哪个错误。

假设您有一个可以分成更小球的球。这些球的大小从 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);
        }
    }
}

最佳答案

我认为如果球的数量超过整数范围,您的解决方案可能会失败。尝试对 factorballstype 使用 long 类型。

关于java - 这个算法有什么问题呢? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33292808/

相关文章:

javascript - 使用循环 onclick 更改背景颜色

javascript - cakephp javascript动态更新

java - if 和 for 循环之间的空指针区别

java - HTTPS 客户端无法连接 - PKIX 路径构建失败但根证书存在

java - split ("[^0-9a-zA-Z]+")在结果中显示空字符串

Java 添加菜单到框架

java - JVM 中的 native 堆栈和缓存代码

python - 我将如何使用 .join 和 for 循环制作随机十六进制代码生成器?

c# - 循环与自定义类

java - 更新 Nutch 以获取所获取的每个 URL 的父级