Мне нужна помощь в решении этой проблемы. Я уже сделал это, но есть ошибка, и я не могу определить, что есть.Что не так с этим алгоритмом? (Java)
Предположим, что у вас есть шар, который можно разделить на более мелкие шары. Эти шары имеют целочисленные размеры, начиная с 1. Шар размером W> 1 будет производить еще один шар размера (W-1) каждые W^2 минуты. Например, мяч размером 3 будет собирать другой размер 2 каждые 9 минут. Производство начинается с момента создания мяча. Шарики размером 1 слишком малы для создания других. Кроме того, шар размера W ограничен сборкой меньших шаров W в качестве меры предосторожности.
Входной формат
вход будет начинаться с целого числа Z, обозначающей количество тестовых примеров. Каждый случай будет состоять из одной строки, содержащей целое число W, указывающее размер исходного шара.
Ограничения 1≤Z≤1000 1≤W≤20
Формат вывода
Для каждого теста вывести одну строку, содержащую пару целых чисел X и Y, разделенные одним пробелом. Целое число X будет указывать общее количество шаров, оставшихся после того, как они позволят им реплицировать как можно больше. Целое число Y будет указывать количество минут, которое потребуется для того, чтобы шары закончили репликацию. Порядок результатов должен соответствовать тому же порядку, в котором предусмотрены тестовые примеры.
Пример ввода
Пример вывода
Пояснение
В первом случае исходный размер-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);
}
}
}
Можете ли вы рассказать, какие результаты вы получаете с вашим подходом? Похоже, вы получите правильный результат. – pgiitu
Я получаю правильный результат во многих случаях, но есть некоторые из них, которые мне не хватает, и я не знаю, что. – IronBoy