2016-03-27 13 views
0

Iはthis hackerrankチャレンジのためにJavaScriptでこのコードを書かれている:シャーロック及び獣 - 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

あなたは実用的なソリューションを必要としない場合は、Nが3未満の場合、まともな数
があることはできません下に:)

1.コードを見ていない、いくつかのヒントです2.数字が大きいほど数字が大きくなりますので、できるだけ多くの数字を表示します.3を見る前に5の数字が表示されます。
3. Nが3の倍数なら最大の数字可能であればすべて5である
4. Nが3の倍数でない場合、いくつかの3に十分なスペースを残すかを確認してください。
例: N = 19 ... 3の数は5の倍数でなければならないことを覚えておいてください。

最初に試してみてください。18 5と1( 's) - 3で5つの者の数を減らして、もう一度
を試すため


まだ無効 - これは

有効ではありませんので3によって5つの数を削減し、2回目の試行
もう一度試してください - 15 5の4 3の 3回目の試行 - 12の5と7の3つの - まだまだ無効

したがって、5の数を3減らしてもう一度試してください。
4th try - 9 5'sと10 3's - 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

例えば、nが3の倍数ではなく5の倍数であるかどうかを確認してから、3をすべて出力するかどうかを調べます。nは20です。答えは3回20回繰り返します。 ..最大の数は5回繰り返され、15回繰り返され、3回は3回繰り返されます。だから、基本的にあなたのロジックを調べる必要があります...私は私の投稿で使ったロジック – abhaybhatia