2015-10-23 2 views
1

Мне нужна помощь в решении этой проблемы. Я уже сделал это, но есть ошибка, и я не могу определить, что есть.Что не так с этим алгоритмом? (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); 
     } 
    } 
} 
+0

Можете ли вы рассказать, какие результаты вы получаете с вашим подходом? Похоже, вы получите правильный результат. – pgiitu

+0

Я получаю правильный результат во многих случаях, но есть некоторые из них, которые мне не хватает, и я не знаю, что. – IronBoy

ответ

0

Я думаю, что ваше решение может потерпеть неудачу в тех случаях, когда количество шаров превышает диапазон целых чисел. Попробуйте использовать long тип для factor, balls, type.

+0

Сделано! Это было! Спасибо! (: – IronBoy

Смежные вопросы