0 / 0 / 0
Регистрация: 20.03.2018
Сообщений: 30
1

Найти максимальное число идущих подряд цифр.

18.09.2018, 20:28. Показов 7053. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане. Поступил в универ на 3 курс с колледжа. Там уже немного Джаву знают, а я только начинаю свой путь. Подскажите, как реализовать данную програму самым простым способом? Заранее спасибо)
Вот задание:
Для произвольного целого числа найти цифру в десятичной записи этого числа, которая повторяется наибольшее количество раз подряд. Например для 14454446 результат равен 4 (цифра 4 повторяется 3 раза подряд), а для 3434719 – 3 (все цифры повторяются только один раз, поэтому в ответе первая из них).
Указание. Для разделения числа на цифры используйте целочисленное деление (/) и деление по модулю (%) на 10.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2018, 20:28
Ответы с готовыми решениями:

Дан текст, в котором имеется несколько идущих подряд цифр. получить число, образованное этими цифрами
Дан текст, в котором имеется несколько идущих подряд цифр. получить число, образованное этими...

Максимальное количество подряд идущих положительных элементов массива
* Дан линейный вещественный массив a1,a2,...,an. * Определить максимальное количество подряд...

Дан текст найти максимальное количество идущих подряд цифр
Ребят подскажите пожалуйста кто может: Пусть дан текст. Найдите наибольшее количество цифр, идущих...

Найти максимальное число идущих подряд равных элементов последовательности
Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое наибольшее...

9
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
18.09.2018, 20:56 2
ну чтобы найти первую цифру - надо поделить на 10 ноль раз и взять остаток от деления на 10,
чтобы найти вторую цифру, надо поделить на 10 один раз и взять остаток от деления на 10,
чтобы найти третью цифру, надо поделить на 10 два раза и взять остаток от деления на 10,
чтобы найти n-ую цифру, надо поделить на 10 n-1 раз и взять остаток от деления на 10.
Проходишь по всем цифрам, считаешь сколько есть каждой из них (например в массиве).
Ищешь максимум.
0
Эксперт функциональных языков программированияЭксперт Java
4485 / 2720 / 485
Регистрация: 28.04.2012
Сообщений: 8,585
18.09.2018, 21:56 3
Цитата Сообщение от xoraxax Посмотреть сообщение
Проходишь по всем цифрам, считаешь сколько есть каждой из них (например в массиве).
Массив не обязателен, нужно ж только подряд идущие учитывать, т.е. достаточно запоминать последний найденный «максимум» — цифру и количество повторений и текущую цифру и её повторения. С массивом сложнее будет выполнить условие:
Цитата Сообщение от Bogdan_Andreev Посмотреть сообщение
все цифры повторяются только один раз, поэтому в ответе первая из них
0
2677 / 1995 / 496
Регистрация: 17.02.2014
Сообщений: 9,357
19.09.2018, 11:20 4
Лучший ответ Сообщение было отмечено Bogdan_Andreev как решение

Решение

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
public static void main(String[] args) {
        int curNum;
        int numSource = 22413177;
        int lastNum = -1;
        int maxSeq = 0;
        int curMaxSeq = 0;
        int numMaxSeq = -1;
        while (numSource != 0) {
            curNum = numSource % 10;
            if (curNum == lastNum)
                curMaxSeq++;
            else curMaxSeq = 1;
            if (curMaxSeq > maxSeq) {
                maxSeq = curMaxSeq;
                numMaxSeq = curNum;
            }
            lastNum = curNum;
            numSource /= 10;
        }
        if (maxSeq == 1)
            System.out.printf("%d -> %d", lastNum, maxSeq);
        else
            System.out.printf("%d -> %d", numMaxSeq, maxSeq);
    }
2
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
19.09.2018, 20:06 5
Aviz__, хорошо, но несколько замечаний. Код выводит последнюю последовательность, а по условию требуется первую. В 13-ой строке должно быть >=. Зачем нужен последний if? Неверный ответ для int numSource = 0;
2
0 / 0 / 0
Регистрация: 20.03.2018
Сообщений: 30
19.09.2018, 21:51  [ТС] 6
Спасибо, очень, и очень благодарен)

Добавлено через 1 час 5 минут
А с >= почему-то выбивает ошибку. С чем это связано?
0
Эксперт функциональных языков программированияЭксперт Java
4485 / 2720 / 485
Регистрация: 28.04.2012
Сообщений: 8,585
19.09.2018, 22:14 7
Лучший ответ Сообщение было отмечено Bogdan_Andreev как решение

Решение

Цитата Сообщение от JIeIIIa Посмотреть сообщение
В 13-ой строке должно быть
Не должно. Он с if/else напутал: делает curMaxSeq = 1; до того, как проверит, что оно больше текущего.

Aviz__, так-то достаточно четырёх переменных вместо пяти.

Добавлено через 16 минут
Раз уж тут всё равно начали выкладывать код,

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
    public static void main(String[] args) {
        test(0, 0);
        test(1, 1);
        test(20, 2);
        test(31, 3);
        test(14454446, 4);
        test(14465555, 5);
        test(6661234, 6);
        test(76543210, 7);
    }
 
    private static void test(int n, int expected) {
        final int result = longestSeqDigit(n);
        System.out.printf("%d -> %d ; %s%n", n, result, result == expected);
    }
 
    public static int longestSeqDigit(int n) {
        n = Math.abs(n);
        if (n < 10) {
            return n;
        }
        int maxDigit = n % 10;
        int maxLength = 1;
        int curDigit = maxDigit;
        int curLength = maxLength;
        n /= 10;
        do {
            final int digit = n % 10;
            n /= 10;
            if (digit == curDigit) {
                curLength++;
            } else {
                if (curLength > maxLength) {
                    maxDigit = curDigit;
                    maxLength = curLength;
                }
                curDigit = digit;
                curLength = 1;
            }
        } while (n > 0);
        if (curLength > maxLength || maxLength == 1) {
            return curDigit;
        }
        return maxDigit;
    }
Код
0 -> 0 ; true
1 -> 1 ; true
20 -> 2 ; true
31 -> 3 ; true
14454446 -> 4 ; true
14465555 -> 5 ; true
6661234 -> 6 ; true
76543210 -> 7 ; true
1
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
19.09.2018, 22:16 8
Цитата Сообщение от korvin_ Посмотреть сообщение
Не должно.
Для примера 22413177 без >= вывод 7 -> 2, т.е. последней группы. С >= вывод 2 -> 2, т.е. первой группы как и требуется в условии.
Цитата Сообщение от korvin_ Посмотреть сообщение
Он с if/else напутал: делает curMaxSeq = 1;
Не могу придумать пример для которого код выдает не верный ответ.
Цитата Сообщение от Bogdan_Andreev Посмотреть сообщение
С чем это связано?
С тем, что не в то место равно добавили.
0
Эксперт функциональных языков программированияЭксперт Java
4485 / 2720 / 485
Регистрация: 28.04.2012
Сообщений: 8,585
19.09.2018, 22:37 9
Цитата Сообщение от JIeIIIa Посмотреть сообщение
Не могу придумать пример для которого код выдает не верный ответ.
Да, действительно, кроме кейса с 0, всё работает.

Кликните здесь для просмотра всего текста
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
    public static void main(String[] args) {
        test(0, 0);
        test(1, 1);
        test(20, 2);
        test(31, 3);
        test(14454446, 4);
        test(14465555, 5);
        test(6661234, 6);
        test(76543210, 7);
        test(768899210, 8);
        test(22413177, 2);
    }
 
    private static void test(int n, int expected) {
        final int result = longestSeqDigit(n);
        System.out.printf("%d -> %d ; %s%n", n, result, result == expected);
    }
 
    public static int longestSeqDigit(int numSource) {
        int curNum;
        int lastNum = -1;
        int maxSeq = 0;
        int curMaxSeq = 0;
        int numMaxSeq = -1;
        while (numSource != 0) {
            curNum = numSource % 10;
            if (curNum == lastNum)
                curMaxSeq++;
            else curMaxSeq = 1;
            if (curMaxSeq >= maxSeq) {
                maxSeq = curMaxSeq;
                numMaxSeq = curNum;
            }
            lastNum = curNum;
            numSource /= 10;
        }
        if (maxSeq == 1)
            return lastNum;
        return numMaxSeq;
    }
Код
0 -> -1 ; false
1 -> 1 ; true
20 -> 2 ; true
31 -> 3 ; true
14454446 -> 4 ; true
14465555 -> 5 ; true
6661234 -> 6 ; true
76543210 -> 7 ; true
768899210 -> 8 ; true
22413177 -> 2 ; true


А в моём коде тоже нужно > сменить на >=, иначе тест с 8 не проходит.
1
0 / 0 / 0
Регистрация: 20.03.2018
Сообщений: 30
22.09.2018, 17:02  [ТС] 10
Всем ещё раз спасибо!
0
22.09.2018, 17:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2018, 17:02
Помогаю со студенческими работами здесь

Вводится бесконечно большое число. Найти максимальную сумму идущих подряд 7 цифр
Например: 14262332312313235 1+4+2+6+2+3+3=21 4+2+6+2+3+3+2=22 2+6+2+3+3+2+3=21 ...

Задача: вводится бесконечно большое число. Найти максимальную сумму идущих подряд 7 цифр
Например: 14262332312313235 1+4+2+6+2+3+3=21 4+2+6+2+3+3+2=22 2+6+2+3+3+2+3=21 ... до конца

Максимальное число идущих подряд равных элементов
Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое наибольшее...

Дано целое число N и набор из N целых чисел. Найти максимальное количество нечетных чисел в наборе, идущих подряд
Дано целое число N и набор из N целых чисел. Найти максимальное количество нечетных чисел в наборе,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru