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

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

27.11.2018, 22:32. Показов 1996. Ответов 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,764
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,764
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__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru