2016-08-27 2 views
-1

Dies ist der Code zum Finden der drittgrößten und der drittkleinsten Nummer.drittgrößte und kleinste Nummer für den paarweisen Austausch der Nummer

t = Anzahl der Testfälle

num = Benutzereingabe Nummer

wenn num eine einstellige Zahl ist, wird es unmöglich drucken.

Wenn die Zahl 123 ist, dann sollte sie 123.132.213.231.312.321 speichern.

Davon ist die dritte von der Vorderseite 213 und von der Rückseite ist 231.

Das Problem meines Codes ist, dass, wenn ich Eingang

123 gibt es Zufallszahl mit 112.211.133.311 ... etc

was ich nicht will.

Ich möchte eine 3-stellige Nummer 1,2 und 3.

wenn die num 1234 enthält, sollte es 4321,2134,3124 ... 1143,2211 nicht haben.

Die Problemmethode ist zu lösen (int num). In dieser Methode habe ich ganzzahl num in string num konvertiert und dann in der string tree set gespeichert, die ich wieder in ganzzahlige treeset umwandeln wird, um 3. größte und 3. kleinste Zahl zu finden.

iam nicht sicher Primefact-Methode (es gibt faktorielles {Länge einer Nummer), ob es zu verwenden ist oder nicht ...

public class ThirdSmallestLargest { 
public static void main(String[] args) { 
    Scanner in=new Scanner(System.in); 
    ThirdSmallestLargest tsl=new ThirdSmallestLargest(); 
    int t,num; 
    t=in.nextInt(); 
    while(t!=0){ 
     num=in.nextInt(); 
     tsl.match(num); 
     t--; 
    } 
} 
//---------------------Method for finding zero in a number 
private void match(int num) { 
    int length=(int) (Math.log10(num)+ 1); 
    if(length==1){ 
     System.out.println("Not possible"); 
    } 
    else{ 
      String s = String.valueOf(num); 
      if (s.indexOf('0')<0){ 
       solve(num); 
      } 
    } 
} 
//---------------------method for distinct jumble number 
//NOT DONE CONVERT STRING TREESET TO INTEGER TREESET 
private void solve(int num) { 
     int length=(int) (Math.log10(num)+ 1); 
     TreeSet <String> tsstr=new TreeSet<>(); 
     Iterator<String> itr=tsstr.iterator(); 
     //Integer.toString(num); 
     char[] chars = Integer.toString(num).toCharArray(); 
     StringBuilder sb = new StringBuilder(); // doesnt work with 666,7979 types of number 
     Random random = new Random(); 
     while (tsstr.size() <fact(num)){ 
     for (int i = 0; i < length; i++) {         
     char c = chars[random.nextInt(chars.length)]; 
      sb.append(c); 

     }   
     String output = sb.toString(); 
     sb.setLength(0);//set the length of the char 

     // String input=sb.toString(); 
     //System.out.println(output); 
     // if(output.contentEquals("1")) 
     // tsstr.add(Integer.toString(num)); 

     tsstr.add(output); 
    } 
     System.out.println(tsstr); 


} 

private int fact(int num) { 
    int length=(int) (Math.log10(num)+ 1); 
    int i,fact=1; 
    for(i=1;i<=length;i++){ 
     fact=fact*i; 
    } 
    return fact; 
} 
} 
+0

Kann Eingabe ('num') doppelte Ziffern haben, z. '1223'? – Andreas

+0

Ja, es kann doppelte Nummer haben – Fawkes

+0

Sie müssen 'itr' nicht deklarieren, Sie verwenden es sowieso nicht. 'fact()' gibt Ihnen nicht die Anzahl der möglichen Permutationen, wenn es doppelte Ziffern gibt, z. B. wenn die Eingabe 112 ist. Sie sollten vor dem Logarithmus ('log10()') nach 0 oder negativer Eingabe suchen. Aber wirklich, denken Sie, dass Sie am besten beginnen, einige der Richtlinien aus den Antworten zu folgen. –

Antwort