2016-03-27 12 views
0

Я написал этот код в JavaScript для this hackerrank вызов:Шерлок и зверь - Hackerrank

function main() { 
    var t = parseInt(readLine()); 
    for(var a0 = 0; a0 < t; a0++){ 
     var n = parseInt(readLine()); 
     if(n < 3) { 
      process.stdout.write("-1\n"); 
     } else if(n % 5 == 0 && n % 3 != 0) { 
      for(var i = 0; i < n; i++) { 
       process.stdout.write("3"); 
      } 
      process.stdout.write("\n"); 
     } else if(n % 3 == 0 && n % 5 != 0) { 
      for(var i = 0; i < n; i++) { 
       process.stdout.write("5"); 
      } 
      process.stdout.write("\n"); 
     } else if(n % 5 != 0 && n % 3 != 0) { 
      var nts = 5; 
      n -= 5; 
      while(n % 3 != 0) { 
       n -= 5; 
       nts += 5; 
      } 
      for(var i = 0; i < n; i++) { 
       process.stdout.write("5"); 
      } 
      for(var i = 0; i < nts; i++) { 
       process.stdout.write("3"); 
      } 
      process.stdout.write("\n"); 
     } else if(n % 15 == 0) { 
      for(var i = 0; i < n; i++) { 
       process.stdout.write("5"); 
      } 
      process.stdout.write("\n"); 
     } 

    } 
} 

Он проходит тестовые случаи 0, 1, 2, 4, 5 и 10, но не в других. Что я делаю не так? Не говорите правильное решение. Думаю, что будет работать. : P

+0

Вы думаете об этом очень сложно. Трудно сказать, какой намек поможет, за исключением того, что сначала подумайте об этом и найдите общий случай. Это очень просто. –

+1

Как бы я знал, чтобы думать об этом по-другому? ._. –

+0

Ваш подход прекрасен. Один шаг через ваш код с _N_ = 6, и вы скоро обнаружите ошибку. –

ответ

1

Вот некоторые подсказки, если вы не хотите, работающее решение, не смотрите на код ниже :)

1. Если N меньше 3 не может быть приличное число
2. Чем больше 5, тем больше число, так как мы хотим наибольшее возможное число, мы проверим, сколько 5 мы можем поместить в него, прежде чем смотреть на 3's
3. Если N кратно 3, то наибольшее число возможно, все 5's
4. если N не кратно 3, посмотрите, сколько 5 может вместить и оставить достаточно места для некоторых 3's
Например. N = 19 ... помните, что число 3 может быть кратным 5 (0 или 5 или 10 или 15 ... так далее)

First Try - скажет 18 5 и 1 3 (s) - это не действует

Поэтому сократить число 5-й на 3 и попробуйте еще раз
Второй попытку - 15 5-х и 4 3-х - недействительно еще

Поэтому сократить число 5-й на 3 и повторите попытку
Третий вариант - 12 5 и 7 3 - недействительный еще

Поэтому уменьшите количество 5 на 3 и повторите попытку
4-я попытка - 9 5-й и 10-й - VALID !!


Надеюсь, что это помогает немного

import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution { 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     int t = in.nextInt(); 
     for(int a0 = 0; a0 < t; a0++){ 
      int n = in.nextInt(); 
      if(n<3){ 
       printNumber(0,0); 
      } 
      else if(n%3==0){ 
       printNumber(n,0);     
      } 
      else { 
       int rem = n%3; 
       int k = 5; 
       boolean divides = false; 
       while(k<=n){ 
        divides = (k-rem)%3==0; 
        if(divides){ 
         break; 
        } 
        k+=5; 
       } 
       if(divides){ 
        printNumber(n-k,k); 
       } else{ 
        printNumber(0,0); 
       } 
      }    
     } 
    } 

    private static void printNumber(int fives, int threes) { 
     if(fives== 0 && threes==0) { 
      System.out.println("-1"); 
      return;     
     } 
     StringBuilder sb = new StringBuilder(); 
     while(fives>0){ 
      sb.append("5");fives--; 
     } 
     while(threes>0){ 
      sb.append("3");threes--; 
     } 
     System.out.println(sb.toString()); 
    } 
} 
+0

может видеть проблему в моем коде? : D –

+1

См. Ваше первое условие else, например, вы проверяете, является ли n кратным 5, но не кратно 3, а затем вы печатаете все 3 ... Так что n равно 20 ... Ваш ответ 3 раза 20 раз. .. В то время как наибольшее число будет иметь 5 повторных 15 раз, за ​​которыми следуют 3 повторения 5 раз ..... Итак, в основном вам нужно изучить свою логику ... Я упомянул логику, которую я использовал в своем сообщении – abhaybhatia