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

Сколько раз в заданном натуральном числе встречается наибольшая цифра

27.11.2018, 22:32. Показов 2031. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
2. Составьте программу, определяющую, сколько раз в заданном натуральном числе М встречается наибольшая цифра.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2018, 22:32
Ответы с готовыми решениями:

Определить, какая цифра встречается в заданном числе чаще: 0 или 9
Дано натуральное число. Определить, какая цифра встречается в нем чаще: 0 или 9.

Наименьшая и наибольшая цифра в числе
Помогите решить задачку Дано целое число N. Найти сумму максимальной и минимальной цифр числа N.

Сколько раз цифра 2 встречается в записи числа
дано целочисленное значение N, выведите на экран цифру числа N.Сколько раз цифра 2 встречается в записи этого числа. Помогите...

28
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
27.11.2018, 23:31
Есть идея сплитнуть М, потом сгруппировать в мапу по сплитнотуму (цифрам) как ключам и коунтингом в значения(число встречь). Вот такое бы с радостью почитал, но попробую я эту штуку только завтра, со свежей головой.

Добавлено через 4 минуты
Я не дописал.
И уже зная что там за максимум встречается, за этим ключем возвратить значние.
1
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
27.11.2018, 23:53
by_barry,

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public static void main(String[] args) {        
        char[] chislo = Integer.toString(new Random().nextInt((999999999 - 111111111) + 1) + 111111111).toCharArray();
        
        char max = 0;
        
        for (int i = 0; i < chislo.length; i++) {
            if  (chislo[i] > max){
                max = chislo[i];
            }
        }
        
        int occurs = 0;
        
        for (int i = 0; i < chislo.length; i++) {
            if (chislo[i] == max) {
                occurs++;
            }
        }
        
        System.out.println("Number: " + String.valueOf(chislo) + ", Max. Digit: " + max + ", Occurs: " + occurs             );
    }
1
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
28.11.2018, 00:57
Со стримами:
Java
1
2
3
4
5
6
7
        int M = 1535325;
        Map.Entry<Integer, Long> entry = String.valueOf(M).chars()
                .boxed()
                .map(i -> i - '0')
                .collect(Collectors.groupingBy(Function.identity(), TreeMap::new, Collectors.counting()))
                .lastEntry();
        System.out.println("" + entry.getKey() + "  " + entry.getValue());
3
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
28.11.2018, 13:38
Вот то что я имел ввиду.
Java
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args){
        Map<String, Long> map = 
            Arrays.stream("468368264".split(""))
                .collect(
                        Collectors.groupingBy(
                                Function.identity(), Collectors.counting()));
        System.out.println("max = "+map.get(Collections.max(map.keySet())));
        System.out.println("keySet : "+map.keySet());
        System.out.println("map : "+map);
}
Code
1
2
3
max = 2
keySet : [2, 3, 4, 6, 8]
map : {2=1, 3=1, 4=2, 6=3, 8=2}
Но я сильно подглядывал в инет, и еще не разобрался с Function.identity()
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
28.11.2018, 13:56
Цитата Сообщение от ViktorFX Посмотреть сообщение
не разобрался с Function.identity()
Полезно заглядывать в исходники:
Java
1
2
3
static <T> Function<T, T> identity() {
  return t -> t;
}
Надеюсь возвращаямая лямбда понятна без комментариев)
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
28.11.2018, 14:03
Цитата Сообщение от JIeIIIa Посмотреть сообщение
Надеюсь возвращаямая лямбда понятна без комментариев)
Так я и заглядывал (контрол и нажать не проблема), и начал еще больше не понимать )))
Я немного непонял сути, у нас же Function<T, T> что получили то и отдаем и по типу и по сути (t -> t)
Такое ощущения что просто в Collectors.groupingBy не было нужного конструктора.
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
28.11.2018, 14:09
Цитата Сообщение от ViktorFX Посмотреть сообщение
что получили то и отдаем
Именно!)
Цитата Сообщение от ViktorFX Посмотреть сообщение
в Collectors.groupingBy не было нужного конструктора
А зачем? groupingBy первым параметром принимает Function. А Вы уже выбирайте как данные преобразовывать в Function.
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
28.11.2018, 14:29
Цитата Сообщение от JIeIIIa Посмотреть сообщение
А зачем?
просто прятать куда-то там реализацию делая все более "сокрытым" можно
конечно..
Я вот предлагаю так
Java
1
2
Map<String, Long> map = Arrays.stream("468368264".split(""))
                .collect(Collectors.groupingBy(t -> t, Collectors.counting()));
Вот кстати сейчас уже могу сказать что я решил задачу сам, и даже короче и понятнее че то что я похожее находил )))
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
28.11.2018, 14:36
Цитата Сообщение от ViktorFX Посмотреть сообщение
Я вот предлагаю так
Только код не находит максимальную цифру
Цитата Сообщение от ViktorFX Посмотреть сообщение
.collect(Collectors.groupingBy(t -> t, Collectors.counting()));
Со статическими импортами читать намного приятнее:
Java
1
.collect(groupingBy(identity(), counting()));
0
28.11.2018, 15:01

Не по теме:

Цитата Сообщение от JIeIIIa Посмотреть сообщение
Только код не находит максимальную цифру
Мы и так флудим, вот я весь код и не приводил, а взятие максимума по ключам выше. А если и здесь ))) вам не понравится что работаю со строками а не числами (в данном случае на результат это не влияет), то мне придется отсортировать Сэт строк компаратором который и будет парсить и сравнивать. Но сейчас увы времени нет((

0
28.11.2018, 15:11

Не по теме:

Цитата Сообщение от ViktorFX Посмотреть сообщение
вот я весь код и не приводил, а взятие максимума по ключам выше
Я то понимаю. Но вот в следующем году найдет этот код очередной студент и будет спрашивать почему не работает)

0
28.11.2018, 22:54

Не по теме:

Цитата Сообщение от JIeIIIa Посмотреть сообщение
найдет этот код очередной студент
На вряд ли. С каких пор студенты (и не только) поиском пользуются?! :D ;)

0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
28.11.2018, 23:28
Kukstyler, ViktorFX, и зачем эти двойные циклы, поиск максимума в ненужной мапе, когда всё делается за один проход?
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
28.11.2018, 23:33
Приветствую korvin_, показывай свой подход!

Я, как и прежде, делаю максимально простые и понятные примеры.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
28.11.2018, 23:47
Цитата Сообщение от Kukstyler Посмотреть сообщение
Я, как и прежде, делаю максимально простые и понятные примеры.
В китайском стиле? Окей.

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    static int largestDigitOccurrences(int num) {
        if (num == 0) {
            return 1;
        }
        int digit = 0;
        int occurrences = 0;
        for (int n = Math.abs(num); n > 0; n /= 10) {
            final int d = n % 10;
            if (d > digit) {
                digit = d;
                occurrences = 1;
            } else if (d == digit) {
                occurrences++;
            }
        }
        return occurrences;
    }
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
29.11.2018, 01:16
Цитата Сообщение от korvin_ Посмотреть сообщение
зачем эти двойные циклы, поиск максимума в ненужной мапе, когда всё делается за один проход?
Если честно то пока за один проход не знаю как.
Вот что я сейчас набросал.
Java
1
2
3
4
5
6
7
8
9
public static void main(String[] args){
        String str = "sjh023409234539yf2";
        Predicate<String> p = (c) -> c.matches("\\d+");
        String s = Arrays.stream(str.split(""))
                .filter(p)
                .max(String::compareTo)
                .get();
        System.out.println("s= "+s);
    }
max() возвращает Оптионал.
Могу еще раз запустить стрим с фильтром найденого и подсчитать результат, но за один проход пока не знаю как..

Добавлено через 3 минуты
korvin_, Уточню, у меня "свое" условие, может оно и лишнее но я так в целях пратики.

Добавлено через 1 час 25 минут
Вот без мап и не по китайски, легко читается
Java
1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args){
        String str = "sjh0f  sgs +fg 2sd 3940929hhh++=h 34539yf2";
        Predicate<String> p = (c) -> c.matches("\\d+");
        String s = Arrays.stream(str.split(""))
                .filter(p)
                .max(String::compareTo)
                .get();
        long l = Arrays.stream(str.split(""))
                .filter(i -> i.equals(s))
                .count();
        System.out.println("in string "+str+", \nwe have maximum digit "+s+", "+l+" times");
    }
Code
1
2
in string sjh0f  sgs +fg 2sd 3940929hhh++=h 34539yf2, 
we have maximum digit 9, 4 times
А вот более обобщенно (с "китайцем" что сидит внутри).
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void main(String[] args){
        String str1 = "8302625385278";
        String str2 = "840fb258gbdh62";
        String str3 = "knshc* +83 cv/3id93 =- ej3";
        String str4 = "444ff7777";
        String str5 = "44fsjdfh4l275f7777";
        howMuchMaximumsDigitsInStrings(str1, str2, str3, str4, str5);
    }
    public static void howMuchMaximumsDigitsInStrings(String... s) {
        List<Map<Integer, Long>> list = new ArrayList<>();
        Predicate<String> p = (c) -> c.matches("\\d");
        Arrays.stream(s)
            .peek(x -> list.add(Arrays.stream(x.split(""))
                .filter(p)
                .collect(groupingBy(Integer::parseInt, counting()))))
            .reduce("0",(str1, str2) -> {
                int count = Integer.parseInt(str1);
                int max = Collections.max(list.get(count).keySet());
                System.out.println("Our string "+str2+" \t\thas maximum "+max+", "+list.get(count).get(max)+" times");
                return ""+(count+1);});
    }
Code
1
2
3
4
5
Our string 8302625385278        has maximum 8, 3 times
Our string 840fb258gbdh62       has maximum 8, 2 times
Our string knshc* +83 cv/3id93 =- ej3       has maximum 9, 1 times
Our string 444ff7777        has maximum 7, 4 times
Our string 44fsjdfh4l275f7777       has maximum 7, 5 times
Может кому ни буди и пригодится, хотя бы мне.
0
5 / 5 / 0
Регистрация: 19.04.2018
Сообщений: 7
29.11.2018, 09:46
А ведь можно было проще... И в одном цикле.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public static void main(String[] args) {
        int number = 1234415355;
        int digit = 0, maxNumber = 0, count = 0;
 
        for(int i = 0; number > 1; i++) {
            digit = number % 10;
            if(digit > maxNumber) {
                maxNumber = digit; 
                count = 1;
            } else if(digit == maxNumber) {
                count++;
            }
            number /= 10;
        }
        System.out.println("Наибольшее значение: " + maxNumber);
        System.out.println("Встречается " + count + " раз.");
    }
0
 Аватар для Aviz__
2748 / 2056 / 508
Регистрация: 17.02.2014
Сообщений: 9,482
29.11.2018, 12:47
Цитата Сообщение от Litesun Посмотреть сообщение
проще
если по древнеЕгипетски, то так, все же)).
Java
1
2
3
4
5
6
7
8
9
10
11
 public static void main(String[] args) {
        int [] numFrequency = new int[10];
        long number = 1274417757355L;
        for (char tmpChar : String.valueOf(number).toCharArray())
            numFrequency[tmpChar - '0']++;
        for (int i = 9; i >= 0; i--)
            if (numFrequency[i] != 0){
                System.out.printf("Наибольший номер = %d встречается %d раз(a)", i, numFrequency[i]);
                break;
            }
    }
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
29.11.2018, 23:19
korvin_, а как тебе такой вариант:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
    public static void main(final String[] args) {
        int number = 41763475;
        int occurs = 0;
        String[] str = Integer.toString(number).split("");
 
        Arrays.sort(str);
 
        for (int i = str.length - 1; str[i].equals(str[str.length - 1]); i--) {
            occurs++;
        }
 
        System.out.println("Cifra: " + str[str.length - 1] + " Vstrechaetsya: " + occurs);
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.11.2018, 23:19
Помогаю со студенческими работами здесь

Напишите программу поиска последовательности символов в заданном файле. Укажите, сколько раз она встречается
Напишите программу поиска последовательности символов в заданном файле. Укажите, сколько раз она встречается.

Напишите программу поиска последовательности символов в заданном файле. Укажите, сколько раз она встречается
Напишите программу поиска последовательности символов в заданном файле. Укажите, сколько раз она встречается.

Подсчитать количество цифр данного числа. Правильно, что данная цифра встречается более двух раз
Подсчитать количество цифр данного числа. Правильно, что данная цифра встречается более двух раз.

Подсчитать количество цифр данного числа. Правильно, что данная цифра встречается более двух раз
1. Подсчитать количество цифр данного числа. Правильно, что данная цифра встречается более двух раз.

Найти сколько раз используется каждая цифра
даны числа 1 2 1 1 3 1 4 1 3 4 2 5 3 4 3 5 6 2 7 0 0 третий столбец показывает количество повторов первых двух цифр,то есть...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru