2015-05-28 3 views
-3

У меня есть номер, который мне нужно переустановить, чтобы найти наибольшее число. В качестве примера введите номер 355, поэтому для этого числа мне нужно найти наибольшее число, которое может быть сформировано путем переустановки цифр. Таким образом, для 355, различных комбинации могут быть возможными после перестановки -Как переустановить номер

355, 535 and 553 

Так вот 553 наибольшего число, и это то, что мне нужно вернуться. В принципе, учитывая вход, мне нужно найти наибольшее число, которое может быть сформировано путем переустановки чисел.

Как мне решить эту проблему?

До сих пор я в состоянии сделать перетасовать числа, как это:

public static void main(String[] args) { 
    //generate random number 
    int number = 355; 

    //put each digit in an element of a list 
    List<Character> numberList = new ArrayList<Character>(); 
    for (char c : String.valueOf(number).toCharArray()) { 
     numberList.add(c); 
    } 

    //shuffle 
    Collections.shuffle(numberList); 

    //output 
    String shuffledNumber = ""; 
    for (Character c : numberList) { 
     shuffledNumber += c; 
    } 
    System.out.println(shuffledNumber); 

} 

Но я путаю, как я могу найти наибольшее число данный вход после перестановки цифр.

ответ

0

Если вам действительно не нужно создавать все комбинации, я бы не стал беспокоиться. Вы действительно можете сделать это с помощью арифметических операций, но в данном случае это, вероятно, проще с точки зрения строк

наивный алгоритм:

  • номер источника = number.toString()
  • цель номер = «»
  • в то время как число источника не пусто
    • д = удалить наибольшее количество из числа источника
    • целевого числа + = д

Вы можете затем преобразовать набранный номер обратно в междунар в случае необходимости.

Другим подходом было бы подсчет числа 9 и добавление к нему результата 9 с. Повторите для 8 секунд, затем 7 с, затем 6 с ...

0

Если вам нужно изменить номера так, чтобы, если мы читаем их слева направо, это должно быть самое большое число среди всех аранжировок, , тогда это просто, вам просто нужно отсортировать номер в порядке убывания.

Попробуйте этот код:

public static void main(String args[]) { 
    //generate random number 
    int number = 355; 

    String numStr = number + ""; 
    char[] numCharArr = numStr.toCharArray(); 
    int[] numArr = new int[numStr.length()]; 

    for(int i = 0 ; i < numCharArr.length ; i ++) { 
     numArr[i] = Integer.parseInt(numCharArr[i] + ""); 
    } 


    // Sort in descending order 
    for(int i = 0 ; i < numArr.length ; i ++) { 
     for(int j = 0 ; j < i ; j ++) { 

      if(numArr[i] > numArr[j]) { 
       // swap 
       int temp = numArr[i]; 
       numArr[i] = numArr[j]; 
       numArr[j] = temp; 
      } 

     } 
    } 

    String largestNumber = ""; 
    for(int i : numArr) { 
     largestNumber += i; 
    } 

    System.out.println("The largest number is : " + largestNumber); 
} 
Смежные вопросы