2016-09-16 5 views
-3

私はあなたがあなたの子供が彼の数学を練習することができます戦略を考案した、ここで質問 https://www.hackerrank.com/contests/programming-jam-2-0/challenges/math-practiceのJava実践プログラミングPROB

を見ることができますHackerRank にこの問題を解決されました。まず、正の整数Nを選択します。次に、N、3×N、5×N、7×Nというように名前を付けるように子供に指示します。

名前を付けたときはいつでも、その番号の数字のすべてについて考えます。彼は、自分が命名した番号の一部として少なくとも1回は見た数字(0,1,2,3,4,5,6,7,8、および9)を追跡します。彼は少なくとも一度10桁のそれぞれを見ていたら、彼は

とも私のコードを弾くが、私はそれは私に(標準出力に何の応答)を与えない提出時に行くことを許され 私はコードを何度も改訂し、間違いです私は知らない 誰がローカルデバッグ

package contest; 

import java.util.ArrayList; 

import java.util.Scanner; 

/** 
* 
* @author Mohamed 
*/ 
public class Solution 
{ 
    public static void main(String [] s){ 
     Scanner In = new Scanner(System.in); 
    int number = In.nextInt(); 
    int counter = 1; 
    int length; 
    int oneDigit; 
    int newNumber; 
    int index; 
    boolean condition = true; 
    int [] arr = new int[10]; 

    ArrayList<String> theList = new ArrayList<>(); 

    while(condition = true){ 
     length = (int)(Math.log10(number) + 1); 
     newNumber = number; 
     while(length > 0) 
     { 
      oneDigit = newNumber % 10; 
      newNumber = newNumber/10; 

      if(arr[0] != oneDigit && arr[1] != oneDigit && arr[2] != oneDigit  && 
       arr[3] != oneDigit && arr[4] != oneDigit && arr[5] != oneDigit && 
       arr[6] != oneDigit && arr[7] != oneDigit && arr[8] != oneDigit && 
       arr[9] != oneDigit) 
      { 
       String num = String.valueOf(oneDigit); 
       theList.add(num); 
       index = theList.lastIndexOf(num); 
       arr[index] = oneDigit; 
      } 
      if(newNumber == 0){ 
       length = 0; 
      } 
      else{ 
       length = (int)(Math.log10(newNumber) + 1); 
      } 
     } 
     counter = counter + 2; 
     if(arr[9] != 0) 
     { 
      System.out.println(number); 
      condition = false; 
     } 
     number = number * counter; 
     } 
     } 
    } 
+2

'しばらく(条件=真)、それは次のとおりです。セットは次のようになります。で、重複

あなたのコードを許可していません。表現の結果でもあります。あなたは 'while(condition == true)'を意味しているかもしれませんが、どちらか一方を書いてはいけませんが、代わりに 'while(condition)'と書いてください。 – Andreas

+2

IMO、HackerRankに答える最善の方法は、HackerRankで完全にコードを書かないことです。 –

+1

@ cricket_007合意。 IDEを使用して、コードを常にローカルで記述し、テストしてください。この場合、IDEはあなたに 'while(condition = true) '問題について話していたでしょう。 – Andreas

答えて

0

セットを使用して、表示された数字を外に出す。あなたは変数に `true`を割り当てるしているので、いつまでもがループ`

Scanner In = new Scanner(System.in); 
int number = In.nextInt(); 
int index = 1; 
int newNum; 
String message = ""; 
Set<Integer> numbersSeen = new HashSet<Integer>(); 

while(true) 
{ 
    newNum = number*index; 
    message += "N ="+number*index+". Now he has seen the digits "; 
    while(newNum > 0) { 
     numbersSeen.add(newNum % 10); 
     newNum /= 10; 
    } 
    for(Integer seenNum : numbersSeen) { 
     message += seenNum +", "; 
    } 
    System.out.println(message.substring(0,message.length()-2)); 
    message = ""; 
    index +=2; 
    if(numbersSeen.size() == 10) { 
     break; 
    } 
} 
-1

それを助けることができますしてください!それはちょうどいくつかの条件に基づいて単一printlnを持っています。この条件が満たされない場合は、何も印刷されません。

また、コードを理解しやすくするためにリファクタリングをお勧めします。

  • 名前を変更すると意味のある名前に変更されます。 isArray9Zeroのように。なぜアルゴリズムは、arr[9] != 0

  • longからの名前付き関数を作成するf(arr[0] != oneDigit。何がそこにチェックされていますか?

関連する問題