Помоги в решении алгоритма показывать числа, которые повторяются - Java

Уважаемое сообщество, я хотел бы опору в решении этого алгоритма:

Введите натуральное любое число в компьютер, чтобы показывать числа, которые повторяются, и количество раз, что эти повторяются. Пример:

Ingrese un número natural cualquiera: 471757347
El numero 4: se repite  2 Veces
El numero 7: se repite  4 Veces

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

Это код, который у меня есть до сих пор:

public static void main(String[] args) {

    Scanner linea = new Scanner(System.in);
    int n, digito, digito1, repetir;
    System.out.print("Introduce un número entero: ");
    n = linea.nextInt();
    repetir = 0;
    digito1 = 0;
    do {
        digito = n % 10;
        if (digito > digito1) {

            digito1 = digito;
            repetir = 1;
        } else {

            if (digito == digito1) {
                repetir++;
            }
        }
        n = n / 10;

    } while (n != 0);

    System.out.println("El numero " + digito1 + " se repite " + repetir + " veces");
}
4
задан 17.06.2016, 22:30
4 ответа

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

Мне приходит в голову это решение (не самая работоспособная, но оно функционирует):

    public static void main(String[] args) {
        Scanner linea = new Scanner(System.in);
        long n;
        System.out.print("Introduce un número:\t");
        n = linea.nextLong();
        String num = String.valueOf(n);
        for(int d = 0; d < 10; d++) {
            int rep = 0;
            for(int i = 0; i < num.length(); i++) {
                if(Integer.valueOf(String.valueOf(num.charAt(i))) == d) {
                    rep++;
                }
            }
            if(rep > 0) {
                System.out.println(
                    String.format("El número %d se repite %d %s", 
                                  d, rep, (rep == 1 ? "vez" : "veces"))
                );
            }
        }
    }
2
ответ дан 24.11.2019, 14:07
  • 1
    Спасибо за опору, только остается шлифовать немного вывод, но он понятен, спасибо. –  Max 17.06.2016, 23:52

Я не понимаю quГ© ты хочешь сделать с if:

   if (digito > digito1) {

Это servirГ - чтобы, для искать dГ-gito больше, но у этого нет значимости aquГ-. Кажется, что ты скопировал cГіdigo algГєn отличную проблему...

В любом случае, ты должен хранить в algГєn сторону разы, которые повторяют каждый dГ-gito. Способ cГіmoda в этом случае - array. Например:

 public static void imprimirRepetidos(long number) {
     int[] cont = new int[10]; // cuenta la cantidad de apariciones de cada digito
     int digito;
     while(number >0) {
         digito = (int) (number % 10);
         cont[digito]++;
         number /= 10;
     }
     for(digito=0;digito<10;digito++) {
         if(cont[digito]>1)
            System.out.println("El digito " + digito + " se repite " + cont[digito]+ " veces");
     }
}

AsegГєrate понимания каждой части cГіdigo.

Другая боялась, terminologГ - в: не перемешивай "nГєmero", "зашифруй" и "dГ-gito". Каждое из чисел, которые используются, чтобы представлять один nГєmero в определенном основании, называется "dГ-gito" (он может быть десятичным, шестнадцатеричным, бинарным, и т.д. - в этом случае, предполагается десятичный).

2
ответ дан 24.11.2019, 14:07
  • 1
    Спасибо, но вызов состоит в том, чтобы делать это без договоренностей. я поместил if, потому что он пытался сначала с ними n и # 250; большие морские окуни, но я остался там, только он считал самых больших, но я благодарен за ответ. –  Max 17.06.2016, 23:49

Альтернатива состоит в том, чтобы обрабатывать информацию nГєmero как string (очевидно санкционируя прежде чем его будет один nГєmero) и с longitudNumero - longitudPrimerasOcurrencias obtendrГ - в количество раз, которое повторяется. Я помещаю тебе пример: Вышедшие

Map<String, Integer> repeated = new LinkedHashMap<>();
        try(Scanner kb = new Scanner(System.in)) {
            System.out.print("Ingrese un número: ");
            // se asegura que sea un número
            Integer number = Integer.parseInt(kb.next());
            for(String n : String.valueOf(number).split("")) {
                // si el mapa no contiene el número procede
                if(!repeated.containsKey(n)) {
                    int numberLen = number.length();
                    int replacesLen = number.replace(n, "").length();
                    int ocurrences = (numberLen - replacesLen);
                    if(ocurrences > 1) {
                        repeated.put(n, ocurrences);
                    }
                }
            }
        } catch(NumberFormatException e) {
            System.out.println("No se ha ingresado un número");
            System.exit(-1);
        }
        for(Map.Entry<String, Integer> entry : repeated.entrySet()) {
            System.out.printf("\nEl número %s se repite %d veces",
                                entry.getKey(), entry.getValue());
        }
        System.out.println();

:

Ingrese un número: 471757347

El número 4 se repite 2 veces
El número 7 se repite 4 veces
2
ответ дан 24.11.2019, 14:07
  • 1
    Функционируй спасибо, немного тоскливо c и # 243; я говорю, но понимают, это вызов, не используя договоренностей и объектов, но мне нравится ты c и # 243; я говорю, спасибо. –  Max 17.06.2016, 23:51
  • 2
    Он немного тоскливый, потому что я использую один try - catch и один Map, чтобы сохранять происшествия, но c и # 243; я говорю, что это просто в s и # 237;. Если у тебя есть сомнения относительно этого, com и # 233; ntalas и со вкусом я объясняю тебе. –  gugadev 17.06.2016, 23:56
  • 3
    Тот, которого я дал, и # 243; отрицательный обет, который он говорил бы мне из-за qu и # 233; пожалуйста. –  gugadev 18.06.2016, 01:03
  • 4
    Есть достаточно haters в этом сообществе –  RoyalUp 18.06.2016, 19:58

В этом случае, анализ проблемы ведет к простому решению:

Цифр, которые могут повторяться, 0,1,2,3,4,5,6,7,8,9

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

int numeroRepeticionesDigito0 = 0;
//...
int numeroRepeticionesDigito9 = 0;

Сейчас, я вижу, что уже tenes способ получать каждую цифру по отдельности. Только останься проверять внутри цикла, что цифра - настоящая, и увеличивать Вашу переменную в одном, что может делать себе со структурой контроля переключатель:

switch (digito)
{
    case 0: numeroRepeticionesDigito0++; break;
    case 9: numeroRepeticionesDigito9++; break;
}

И после, что закончил цикл показывать стоимость каждой из переменных, которые приносят общее количество повторений. В этом случае, поскольку я предполагаю, что это задание, я предпочитаю не показывать полный код, но идея эта, так, что структура повторения не использует передовые инструкции, больше ничто (while) и один из контроля (переключатель). Для этого типа проблем, я предлагаю тебе анализировать мыслительный процесс, как это решил бы ты, и потом стараться переводить этот мыслительный процесс в коде.

0
ответ дан 24.11.2019, 14:07