Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
8 / 8 / 10
Регистрация: 16.10.2012
Сообщений: 523

Найти наиболее повторяющуюся цифру в числе

09.09.2014, 21:14. Показов 6819. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется число например 333456, найти наиболее повторяющееся число (число тут в данном случае будет 3), как это сделать?
Это доп. задание к заданию по суммированию всех цифр в числе:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Scanner;
public class Summ 
{
    public static void main(String[] args) 
    {
        Scanner scan = new Scanner(System.in);
        System.out.print("X: ");
        int x = scan.nextInt();
        int mult = 1;
        int sum = 0;
        int povt = 0;
        for (int i = 1; x > 0; i++)
        {
            if(x % 10 != 0)
            {
                mult = mult * (x % 10);
                sum = sum + x % 10;
                x = x / 10; 
                int t = x % 10;
                /*if(t <= t - 1)
                {
                    povt = t;
                }*/
            }
        }
        System.out.println("Сумма цифр: " + sum);      
        System.out.println("Произведение цифр: " + mult);
        //System.out.println("Повторяющееся число: " + povt);
    }
 
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.09.2014, 21:14
Ответы с готовыми решениями:

Найти наиболее часто повторяющуюся цифру в числе
Дано натуральное число. Определить наиболее часто повторяющуюся в нем цифру и указать ее позиции в числе. Помогите, пожалуйста.

В строке символов найти наиболее часто повторяющуюся цифру
В строке символов, введенных в StringGrid(1строка), найти наиболее часто повторяющуюся цифру я неочень понимаю, в стринггриде может...

В числе удалить повторяющуюся цифру
Нужно в числе удалить повторяющуюся цифру. Помогите найти ошибку в функции: for(j=0;j&lt;k;j++) //к - количество цифр в числе { ...

16
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
09.09.2014, 23:28
я бы копнул в сторону массива цифр и подсчитал, сколько раз встречается каждая цифра.
дальше просто - поиск максимального значения в массиве.

примерно так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  int[] digitCount = new int[10];
  for(int i = 0; i<digitCount.length; i++){ digitCount[i] = 0 }  // обнулили счётчики
...
 
            if(x % 10 != 0)
            {
                mult = mult * (x % 10);
                sum = sum + x % 10;
 
                digitCount[x % 10]++;  // увеличили счётчик на единицу
 
                x = x / 10; 
                int t = x % 10;
            }
....
 
        System.out.println("Сумма цифр: " + sum);       
        System.out.println("Произведение цифр: " + mult);
 
        int mostFreqDigit = 0;
        for(int i = 0; i<digitCount.length; i++){ 
               if (digitCount[i]>digitCount[mostFreqDigit]) 
               {
                  mostFreqDigit = i
               }
        }
        System.out.println("Наиболее часто встречалась цифра: " + mostFreqDigit);
p.s. данный код отображает только одну цифру.
например, для числа 71372373
отобразится "Наиболее часто встречалась цифра: 3"
если нужно отобразить все цифры, которые встретились равное максимальному повторению числу раз,
то код нужно чуть-чуть переделать (просто вывод в цикле сделать...).
0
8 / 8 / 10
Регистрация: 16.10.2012
Сообщений: 523
09.09.2014, 23:36  [ТС]
Sergio Leone, фишка в том, чтобы не использовать строки и не использовать массив, я бы не задавал вопрос, если бы все было так просто
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
09.09.2014, 23:57
Цитата Сообщение от Darkvoid Посмотреть сообщение
чтобы не использовать строки и не использовать массив
опять глупые и бессмысленные ограничения.. Так предупреждать надо сразу.

А ещё что запрещёно? Коллекции можно использовать?
нет? ладно. но и это не проблема.
Нам же никто не запрещает завести дополнительные переменные, надеюсь?

вот вам варианты (разной степени извращённости):
вариант 1.
тупо и нудно опишите 10 переменных и считайте в них, сколько раз встретилась каждая цифра
(это тот же вариант с массивом, только вместо массива - 10 переменных)

вариант 2.
в цикле 10 раз вызывайте полный цикл разбор числа (обратите внимание, что у Вас число x портится, нужно его сохранять). каждый раз в цикле считайте, сколько раз встретилась очередная (по циклу) цифра.
одновременно в этом же цикле и максимум можно сразу искать.

вариант 3. использовать одно БОЛЬШОЕ число, в котором единицы - это то, сколько раз встретился ноль в исходном числе, десятки - это то, сколько раз встретилась единица в исходном числе, сотни - сколько раз встретилась двойка и т.д.

я бы лично выбрал вариант 2. он, конечно, крайне неээфективный. зато простой в реализации.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
10.09.2014, 00:54
Если немного подумать, можно придти примерно к такому решению.

Может некорректно работать для некоторых вариантов (например если максимум больше 9), я не занимался тестами. При желании думаю сами доработаете код хотя если принять во внимание что вы работаете с числами диапазона int, то такой случай возможен только для числа 1111111111 т.к 2222222222 уже будет вне диапазона int. Такой случай можно обработать отдельно.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class Solution {
 
    public static void main(String[] args) {
        int num = 333456;
        long counter = getNumbersCount(num);
        int result = findMaxNumber(counter);
        System.out.println("Number " + result + " occures the most");
 
    }
 
    private static int findMaxNumber(long numberCounts) {
        int currentMax = 0;
        int indexOfMaxNumber = 0;
        int index = 0;
        int tmp;
        while(numberCounts > 0) {
            tmp = (int) (numberCounts % 10);
            if(tmp > currentMax) {
                currentMax = tmp;
                indexOfMaxNumber = index;
            }
            numberCounts = numberCounts / 10;
            index++;
        }
        return indexOfMaxNumber;
    }
 
    private static long getNumbersCount(int num) {
        int tmp;
        long result = 0;
        while(num > 0) {
            tmp = num % 10;
            result = result + getFactor(tmp);
            num = num / 10;
        }
        return result;
    }
 
    private static int getFactor(int num) {
        int result = 1;
        for(int i=0; i < num; i++) {
            result *=10;
        }
        return result;
    }
 
}
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
10.09.2014, 09:26
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Если немного подумать, можно придти примерно к такому решению.
KEKCoGEN, я правильно понимаю, что это реализация идеи, которая у меня описана как вариант №3?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
10.09.2014, 09:58
Sergio Leone, ага
1
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
10.09.2014, 10:39
Лучший ответ Сообщение было отмечено Darkvoid как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public static void main(String[] args) {
        int d = 3334456; // число в котором надо посчитать
        int mostDigit = 0;
        int digitCounter = 0;
        int maxCounter = 0;
        for (int i = 0; i < 10; i++) {
            int tmp = d;
            digitCounter = 0;
            while (tmp != 0) {
                int ost = tmp % 10;
                tmp /= 10;
                if (ost == i) {
                    digitCounter++;
                }
            }
            if (digitCounter > maxCounter) {
                mostDigit = i;
                maxCounter = digitCounter;
            }
        }
        System.out.println("Цифра: " + mostDigit + " повторений: " + maxCounter);
    }
Bash
1
Цифра: 3 повторений: 3
2
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
10.09.2014, 10:42

Не по теме:

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
ага
у меня, наверное, не хватило бы духу это реализовывать.
Так что - респект Вам!



Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Паблито Посмотреть сообщение
for (int i = 0; i < 10; i++) {
int tmp = d;
Во! А вот и реализацию варианта №2 сделали!
Паблито, и Вам респект!

0
10.09.2014, 10:45

Не по теме:

не то вставил, забыл произведение цифр

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    public static void main(String[] args) {
        int d = 3334456; // число в котором надо посчитать
        int mostDigit = 0;
        int digitCounter = 0;
        int maxCounter = 0;
        int ost = 0;
        int mul = 1;
        for (int i = 0; i < 10; i++) {
            int tmp = d;
            digitCounter = 0;
            while (tmp != 0) {
                ost = tmp % 10;
                if ((i == 0) && (ost > 0)) {
                    mul *= ost;
 
                }
                tmp /= 10;
                if (ost == i) {
                    digitCounter++;
                }
            }
            if (digitCounter > maxCounter) {
                mostDigit = i;
                maxCounter = digitCounter;
            }
        }
        System.out.println("Цифра: " + mostDigit + " повторений: " + maxCounter);
        System.out.println("Произведение цифр: " + mul);
    }

0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
10.09.2014, 11:05
Цитата Сообщение от Паблито Посмотреть сообщение
не то вставил, забыл произведение цифр
ну, Вы ещё и сумму цифр забыли вставить!
Так с этим у автора темы, вроде бы, вопросов нет. Только повторяющееся число + ограничения вызвали у него сложности.
А зачем Вы пост свой отметили как [OFF], он же по теме топика, прямо в цель, как пуля! (c) ДМБ
0
44 / 44 / 37
Регистрация: 11.12.2012
Сообщений: 200
Записей в блоге: 2
11.09.2014, 09:08
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Main {
 
    public static void main(String[] args) {
        Integer one = 333456;
        String arr[] = "333456".split("");
        
        ArrayList<Integer> search = new ArrayList<Integer>();
        for(int i = 0; i < arr.length; i++){
            search.add(Integer.valueOf(arr[i]));
        }
        
        Set<Integer> uniqueSet = new HashSet<Integer>(search);
        for (Integer temp : uniqueSet) {
            System.out.println(temp + ": " + Collections.frequency(search, temp));
        }
    }
}
0
11.09.2014, 09:19

Не по теме:

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

0
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188
14.09.2014, 03:58
1ds, ну тогда лучше уже так

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package Yoghurt_92.Java_8;
 
import java.util.*;
import java.util.stream.*;
 
/**
 * Created by Yoghurt_92 on 11.09.14.
 */
 
public class Test {
 
    public static void main(String... args) {
 
        try(Scanner reader = new Scanner(System.in)) {
 
            System.out.print("Enter number: ");
            String value = reader.nextLine();
 
            Optional<Map.Entry<Integer, Long>> max =
                    Arrays.stream(value.split("")).map(change -> Integer.valueOf(change)).
                            collect(Collectors.groupingBy(Integer::intValue, Collectors.counting())).
                                entrySet().stream().max(Comparator.comparingLong(Map.Entry::getValue));
 
            if (max.isPresent())
                System.out.println(max.get().getKey() + "\t" + max.get().getValue());
        }
        catch (NoSuchElementException exc) {
            exc.printStackTrace();
        }
    }
}
0
СуперМодулятор
 Аватар для Bringoff
134 / 134 / 48
Регистрация: 03.11.2012
Сообщений: 974
14.09.2014, 12:39
Не, ну если в лоб надо, то проще всего так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class NumbersCounter {
 
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        long number = Integer.parseInt(reader.readLine());
        List<Integer> list = new ArrayList<>(10);
        for (int i = 0; i < list.size(); i++) {
            list.add(0);
        }
        while (number > 0) {
            short temp = (short) (number % 10);
            list.add(temp, list.get(temp) + 1);
            number /= 10;
        }
        System.out.println(list.indexOf(Collections.max(list)));
    }
}
Но если вообще нельзя ничем пользоваться, кроме переменных простых типов, то...

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Yoghurt_92 Посмотреть сообщение
String... args
Йогурт, какой IDE пользуешься? Которая так генерит.

0
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188
14.09.2014, 18:00
Bringoff, а вы знаете что значит String... args? ... - переменное количество аргументов, т.е. String[] эквивалентно String... Любая IDE схавает это
0
СуперМодулятор
 Аватар для Bringoff
134 / 134 / 48
Регистрация: 03.11.2012
Сообщений: 974
14.09.2014, 18:42
Цитата Сообщение от Yoghurt_92 Посмотреть сообщение
а вы знаете что значит String... args?
Я знаю, но Intellij Idea автоматически создает запись все же вида String[] args, Эклипс вроде тоже. Видимо, вы в NetBeans пишете Не вручную же вы пакеты и темплейт прописываете.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.09.2014, 18:42
Помогаю со студенческими работами здесь

Найти самую повторяющуюся цифру в массиве цифр
Дано N чисел и N цифр. Напишите программу которая находит самую повторяющуюся цифру в массиве . Входные данные ...

Определить цифру, наиболее часто встречающуюся в числе
Помогите, не понимаю, что нужно сделать? Для заданного целого числа N определить цифру а, наиболее часто встречающуюся в числе....

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

Определить цифру, наиболее часто встречающуюся в заданном числе
Для заданного целого числа N определить цифру а, наиболее часто встречающуюся в числе (задача целочисленной арифметики)Как задать кол-во...

Для заданного целого числа N определить цифру а, наиболее часто встречающуюся в числе
Для заданного целого числа N определить цифру а, наиболее часто встречающуюся в числе Помогите решить эту задачу срочно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru