Sultan
16 уровень

Codes Inc; Room #007

Статья из группы Архив info.javarush

Наименьшее и наибольшее числа из тех же цифр

Codes Inc; Room #007 - 1 Требуется написать программу, которая найдет наименьшее и наибольшее числа, состоящие из тех же цифр, что и заданное натуральное число N. Условие: Входные данные считываются с консоли. Выходные данные выводятся в консоль на одной строке через пробел. Codes Inc; Room #007 - 2
Комментарии (8)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
LastLost Уровень 41
2 сентября 2014
тогда так:

public static void minimax() throws NumberFormatException
    {
        Scanner scanner = new Scanner(System.in);
        String n = scanner.nextLine();
        if (!n.matches("^[-]?[0-9]+")) {
            throw new NumberFormatException();
        }

        char[] input = n.toCharArray();
        char[] arg = new char[input.length];
        int k = 0;

        if (input[0] == '-') {
            k = 1;
            arg[0] = '-';
        }

        Arrays.sort(input, k, input.length);

        for (int i = k; i < arg.length; i++) arg[i] = input[input.length - i + k - 1];

        if (input[k] == '0')
            for (int i = k; i < input.length; i++)
                if (input[i] != '0')
                {
                    char temp = input[i];
                    input[i] = input[k];
                    input[k] = temp;
                    break;
                }

        if (k == 0)
            System.out.println(new String(input) + " " + new String(arg));
        else
            System.out.println(new String(arg) + " " + new String(input));

    }
zeos Уровень 30
2 сентября 2014
Попытка — не пытка:)

    public static void composeMinMax() throws IOException
    {
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
        long givenN = Long.parseLong(r.readLine());
        ArrayList<Long> min = new ArrayList<Long>();
        ArrayList<Long> max = new ArrayList<Long>();
        while (Math.abs(givenN) > 0)
        {
            min.add(0, Math.abs(givenN) % 10);
            max.add(0, Math.abs(givenN) % 10);
            givenN /= 10;
        }
        for (int i = 0; i < min.size(); i++)
            for (int j = i; j < min.size(); j++)
            {
                long m = min.get(i);
                long n = max.get(i);
                if ((min.get(i) > min.get(j)) && (min.get(j) != 0 || i > 0))
                {
                    min.set(i, min.get(j));
                    min.set(j, m);
                }
                if (max.get(i) < max.get(j))
                {
                    max.set(i, max.get(j));
                    max.set(j, n);
                }
            }
        String sMin = "";
        String sMax = "";
        for (int i = 0; i < min.size(); i++)
        {
            sMin += min.get(i).toString();
            sMax += max.get(i).toString();
        }
        if (givenN > 0)
            System.out.println(sMin + " " + sMax);
        else
            System.out.println("-" + sMax + " -" + sMin);
    }
Docktor91 Уровень 40
2 сентября 2014
как то так)
public static void findMinAndMax() throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String N = br.readLine();
        String min = String.valueOf(Integer.MAX_VALUE);
        String max = String.valueOf(Integer.MIN_VALUE);
        try
        {
            while (true)
            {
                String readed = br.readLine();
                Integer.parseInt(readed);//               for exit
                if (N.length() != readed.replaceAll("-", "").length())
                    continue;
                String copyReaded = new String(readed);

                for (char c : N.toCharArray())
                {
                    copyReaded = copyReaded.replace(c, 'e');
                }
                if (copyReaded.replaceAll("[-,e]", "").equals(""))
                {
                    min = Integer.parseInt(min) > Integer.parseInt(readed) ? readed : min;
                    max = Integer.parseInt(max) < Integer.parseInt(readed) ? readed : max;
                }

            }
        }
        catch (Exception e)
        {
            System.out.println(String.format("%s %s %s", min, N, max));
        }
    }
LastLost Уровень 41
1 сентября 2014
так пойдет?

public static void minimax(int n)
    {
        char[] input = String.valueOf(n).toCharArray();
        char[] arg = new char[input.length];
        int k = 0;

        if (input[0] == '-') {
            k = 1;
            arg[0] = '-';
        }

        Arrays.sort(input, k, input.length);

        for (int i = k; i < arg.length; i++) arg[i] = input[input.length - i + k - 1];

        if (input[k] == '0')
            for (int i = k; i < input.length; i++)
                if (input[i] != '0')
                {
                    char temp = input[i];
                    input[i] = input[k];
                    input[k] = temp;
                    break;
                }

        if (k == 0)
            System.out.println(Integer.parseInt(new String(input)) + " " + Integer.parseInt(new String(arg)));
        else
            System.out.println(Integer.parseInt(new String(arg)) + " " + Integer.parseInt(new String(input)));
    }
Tan4ek Уровень 20
31 августа 2014
public static void func(Integer n) {
    int[] arrayNumber = new int[10];
    for(int i = 0; i < arrayNumber.length; i++)
        arrayNumber[i] = 0;

    boolean negativ = false;
    if(n < 0){
        negativ = true;
        n = -n;
    }
    while(n != 0){
        arrayNumber[(int) (n % 10)]++;
        n /= 10;
    }
    StringBuilder builderMin = new StringBuilder();
    boolean flag = true;
    for(int i = 1; i < arrayNumber.length; i++){
        if(arrayNumber[i] != 0){
            for (int j = 0; j < arrayNumber[i]; j++)
                builderMin.append(i);
            if(flag)
                if(arrayNumber[0] != 0){
                    flag = false;
                    for (int i1 = 0; i1 < arrayNumber[0]; i1++)
                        builderMin.append(0);
                }
        }
    }
    StringBuilder builderMax = new StringBuilder();
    for (int i = arrayNumber.length - 1; i != -1; i--){
        if(arrayNumber[i] != 0)
            for (int j = 0; j < arrayNumber[i]; j++) {
                builderMax.append(i);
            }
    }
    int min,max;
    if(negativ){
        max = -1 * Integer.parseInt(builderMin.toString());
        min = -1 * Integer.parseInt(builderMax.toString());
    } else{
        min = Integer.parseInt(builderMin.toString());
        max = Integer.parseInt(builderMin.toString());
    }
    System.out.println(min + " " + max);
}
Docktor91 Уровень 40
31 августа 2014
у меня вопрос, если N=121;
числа 1, 11, 21, 1221, 22 и т.д подходят про «состоят из тех же цифр», или
количество цифр N должно равняться количеству цифр искомых мин макс(кароче говоря должны являться анаграмой)?
terranum Уровень 28
31 августа 2014

    public static void minAndMax(int N)
    {
        boolean negative = false;
        long number = N;
        if (number < 0)                                  //isNegative?
        {
            negative = true;
            number = -number;
        }
        int j = 1000_000_000;
        int k = 10;
        for (; j > 0; j /= 10, k--)
        {
            if (number / j > 0)
                break;
        }
        long[] arr = new long[k];                        //k is number of digit
        for (int i = k; i > 0; i--)                      //add digit of N
        {
            k--;
            arr[k] = number / j;
            number -= (number / j) * j;
            j /= 10;
        }
        Arrays.sort(arr);
        String firstNumber = negative ? "-" : "";        //isNegative or not
        String secondNumber = negative ? "-" : "";       //isNegative or not
        for (int i = arr.length - 1; i > -1; i--)        //reversed numbers
            firstNumber += arr[i];
        //preparation for second number
        if (arr[0] == 0)                                //the first number must be not zero
            for (int i = 0; i < arr.length; i++)        
            {
                if (arr[i] != 0)
                {
                    arr[0] = arr[i];
                    arr[i] = 0;
                    break;
                }
            }
        for (long elem : arr)
        {
            secondNumber += elem;
        }                                                //cast to long
        long max = Long.parseLong(firstNumber);
        long min = Long.parseLong(secondNumber);
        if (min > max)                                   //negative-positive correction
        {
            max += min;
            min = max - min;
            max -= min;
        }
        System.out.println(min + " " + max);
    }