Как найти одинаковые цифры в числе python

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

x = int(input('Введите число:'))

def array(x):
    global a
    a = []
    while x > 0:
        b = x % 10
        a.append(b)
        x //= 10
        return list(reversed(a))


print(array(x))
for i in range(len(a)):
    if a[i] == a[i+1]:
        print('да')
        break
    else:
        print("нет")

задан 18 мар 2021 в 6:48

Xlemon5's user avatar

1

У вас цикл while завершается на первой итерации. Уберите отступ перед return.

Вторая ошибка заключается в том, что у вас цикл for выполняется len(a) раз. Поэтому на последней итерации a[i+1] приведет к исключению IndexError. Используйте цикл до len(a) - 1.

Ну и сам алгоритм сравнения чисел неверный. Для числа 121 вы не найдете совпадений, т.к. 1 != 2 и 2 != 1. Можно сравнить длину множества от a с длиной a. Множество содержит только уникальные элементы последовательности, поэтому, если длины разные, то можно сделать вывод, что какое-то число повторяется.

Избавьтесь от глобальных переменных.

def array(x):
    nums = []
    while x > 0:
        b = x % 10
        nums.append(b)
        x //= 10
    return list(reversed(nums))


x = int(input('Введите число: '))
a = array(x)
print('Да' if len(set(a)) != len(a) else 'Нет')

ответ дан 18 мар 2021 в 6:59

ioprst's user avatar

ioprstioprst

1,2187 серебряных знаков17 бронзовых знаков

Можно решить вопрос просто стандартными структурами. Построить список со всеми символами числа, потом множество этих символов (удалит дубли), если длина этих двух переменных не равна то, очевидно, есть дубли. Предварительно можно проверить, что если кол-во символов в списке больше 10 (столько всего есть цифр) то, очевдно, цифры повторяются.

def double_exist(number: int) -> bool:
    list_number = [s for s in str(number)]
    if len(list_number) > 10:
        return True

    set_number = set(list_number)
    if len(list_number) != len(set_number):
        return True
    return False


number = int(input('Введите число: '))

if double_exist(number):
    print('Да')
else:
    print('Нет')

ответ дан 18 мар 2021 в 11:00

asanisimov's user avatar

asanisimovasanisimov

1,4564 серебряных знака12 бронзовых знаков

3

На вход получаем два числа, 1000 и 2600. Необходимо вывести все числа с тремя одинаковыми числами (не используя списки). Начал как — то так, но закончить не могу…. Как посчитать одинаковые цифры и вывести числа?

num_1 = int(input(‘Введите первое число: ‘))
num_2 = int(input(‘Введите второе число: ‘))
count = 0

for i in range(number1, number2 + 1, 1):
i = str(i)
for num in ……..:
if num == …………:
……………………..


  • Вопрос задан

    10 мар.

  • 455 просмотров

(Ответ сгенерирован искусственным интеллектом!)
Вы можете решить эту задачу, преобразовав каждое число в строку, а затем использовать метод count() для подсчета количества вхождений каждой цифры. Затем можно проверить, есть ли у числа три одинаковых цифры, используя условие if. Например:

num_1 = 1000
num_2 = 2600

for i in range(num_1, num_2 + 1):
    s = str(i)
    for c in s:
        if s.count(c) == 3:
            print(i)
            break

Здесь мы проходимся по каждому числу i в диапазоне от num_1 до num_2, преобразуя его в строку s. Затем мы проходимся по каждой цифре c в строке s, и если c встречается в строке s три раза, мы выводим число i и переходим к следующему числу. Обратите внимание, что мы используем оператор break, чтобы выйти из цикла, когда мы находим число с тремя одинаковыми цифрами, потому что дальнейший поиск в этом числе бессмысленен.

Пригласить эксперта

Составь коллекцию, в которой будет храниться набор пар: цифра и сколько раз она встретилась. Лучше всего подойдёт словарь.
Дальше просто перебери элементы словаря, если есть элемент, у которого значение равно 3, значит, число подходит.

Совет: посмотри в сторону collections.Counter.

Можно попробовать решить обратную зачачу. Генерировать все с 3 одинаковыми.

Например.

111x = генератор для последовательности 1111,1112,1113....1119
11x1 = для 1111, 1121,1131....

А потом — отфильтровать те которые не заходят в заявленный диапазон.


  • Показать ещё
    Загружается…

29 мая 2023, в 06:54

5000 руб./за проект

29 мая 2023, в 06:37

1500 руб./за проект

29 мая 2023, в 06:23

15000 руб./за проект

Минуточку внимания

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given a positive integer N, the task is to check whether all the digits of the given integer N are the same or not. If found to be true, then print Yes. Otherwise, print No.

    Examples:

    Input: N = 222
    Output: Yes

    Input: N = 232
    Output: No

    Naive Approach: The simplest approach to solve the given problem is to iterate over all the digits of the given number N and if there exists any distinct digit then print Yes. Otherwise, print No.

    Below is the implementation of the above approach:

    C++

    #include <bits/stdc++.h>

    using namespace std;

    string checkSameDigits(int N)

    {

        int digit = N % 10;

        while (N != 0)

        {

            int current_digit = N % 10;

            N = N / 10;

            if (current_digit != digit)

            {

                return "No";

            }

        }

        return "Yes";

    }

    int main()

    {

        int N = 222;

        cout << (checkSameDigits(N));

        return 0;

    }

    Java

    import java.io.*;

    class GFG {

        public static String checkSameDigits(int N)

        {

            int digit = N % 10;

            while (N != 0) {

                int current_digit = N % 10;

                N = N / 10;

                if (current_digit != digit) {

                    return "No";

                }

            }

            return "Yes";

        }

        public static void main(String args[])

            throws IOException

        {

            int N = 222;

            System.out.println(

                checkSameDigits(N));

        }

    }

    Python3

    def checkSameDigits(N) :

        digit = N % 10;

        while (N != 0) :

            current_digit = N % 10;

            N = N // 10;

            if (current_digit != digit) :

                return "No";

        return "Yes";

    if __name__ == "__main__" :

        N = 222;

        print(checkSameDigits(N));

    C#

    using System;

    class GFG {

        static string checkSameDigits(int N)

        {

            int digit = N % 10;

            while (N != 0) {

                int current_digit = N % 10;

                N = N / 10;

                if (current_digit != digit) {

                    return "No";

                }

            }

            return "Yes";

        }

        public static void Main()

        {

            int N = 222;

            Console.Write(checkSameDigits(N));

        }

    }

    Javascript

    <script>

    function checkSameDigits(N)

    {

        var digit = N % 10;

        while (N != 0)

        {

            var current_digit = N % 10;

            N = parseInt(N / 10);

            if (current_digit != digit)

            {

                return "No";

            }

        }

        return "Yes";

    }

        var N = 222;

        document.write(checkSameDigits(N));

    </script>

    Time Complexity: O(log10N)
    Auxiliary Space: O(1)

    Efficient Approach: The above approach can also be optimized by forming another number, say M of the same length of the given number N with the rightmost digit of N assuming N has all same digits and then comparing it with N. Now, M is of type (K*111….), where K is any digit from N.

    Now to create the number M consisting of the only 1s, the sum of a Geometric Progression can be used as illustrated for the count of digits as 3:

    Consider the first term(say a) as 1 and the common ratio(say r) as 10. Now for the value count of digits(say D) as 3 the sum of Geometric Progression is given by:

    => Sum = frac{a*(r^D - 1)}{r - 1}

    => Sum =  frac{1*(10^3 - 1)}{10 - 1}

    => Sum = frac{999}{9}

     -> Sum = 111

    From the above observations, generate the number M and check if K*M is the same as the N or not. If found to be true, then print Yes. Otherwise, print No.

    Below is the implementation of the above approach:

    C++

    #include <bits/stdc++.h>

    using namespace std;

    string checkSameDigits(int N)

    {

        int length = int(log10(N)) + 1;

        int M = (int(pow(10, length)) - 1) / (10 - 1);

        M *= N % 10;

        if (M == N)

            return "Yes";

        return "No";

    }

    int main()

    {

        int N = 222;

        cout << checkSameDigits(N);

    }

    Java

    import java.io.*;

    class GFG {

        public static String checkSameDigits(int N)

        {

            int length = ((int)Math.log10(N)) + 1;

            int M = ((int)Math.pow(10, length) - 1)

                    / (10 - 1);

            M *= N % 10;

            if (M == N)

                return "Yes";

            return "No";

        }

        public static void main(String args[])

            throws IOException

        {

            int N = 222;

            System.out.println(

                checkSameDigits(N));

        }

    }

    Python3

    import math

    def checkSameDigits(N) :

        length = int(math.log10(N)) + 1;

        M = (int(math.pow(10, length)) - 1)// (10 - 1);

        M *= N % 10;

        if (M == N) :

            return "Yes";

        return "No";

    if __name__ == "__main__" :

        N = 222;

        print(checkSameDigits(N));

    C#

    using System;

    class GFG {

        public static String checkSameDigits(int N)

        {

            int length = ((int)Math.Log10(N)) + 1;

            int M = ((int)Math.Pow(10, length) - 1) / (10 - 1);

            M *= N % 10;

            if (M == N)

                return "Yes";

            return "No";

        }

        public static void Main()

        {

            int N = 222;

            Console.WriteLine(checkSameDigits(N));

        }

    }

    Javascript

    <script>

    function checkSameDigits(N)

        {

            var length = (Math.log10(N)) + 1;

            var M = (Math.pow(10, length) - 1)

                    / (10 - 1);

            M *= N % 10;

            if (M = N)

                return "Yes";

            return "No";

        }

    var N = 222;

    document.write(checkSameDigits(N));

    </script>

     Time Complexity: O(logN)
    Auxiliary Space: O(1) 

    Last Updated :
    01 Nov, 2022

    Like Article

    Save Article

    Первоначальное решение:

    # Программа должна вывести «YES» если 
    #число состоит из одинаковых 
    #цифр и «NO» в противном случае.
    n = int(input())
    lastNum = n % 10
    num = lastNum
    while n != 0 and num == lastNum:
      num = n % 10
      n = n // 10
      if num != lastNum:
        print('NO')
    if num == lastNum:
      print('YES')

    Альтернативные решения

    n = int(input())
    m = n % 10
    answer = 'YES'
    while n != 0:
        if m != n % 10:
            answer = 'NO'
        n = n // 10
    print(answer) 

    и еще

    num = str(input())
    max, min = max(num), min(num)
    if max == min:
        print('YES')
    else:
        print('NO')

    Напишите функцию, подсчитывающую количество одинаковых цифр в числе.

    Условия:

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

    Разбор примера

     digit_count(136116) ➞ 312332
     # Цифра 1 появляется трижды, поэтому все единицы заменяются на тройки.
     # Цифра 3 появляется только один раз, поэтому тройка заменяется единицей.
     # Цифра 6 появляется дважды, поэтому обе шестерки заменяются двойками.
     # Возвращается целое число.

    Другие примеры

     digit_count(221333) ➞ 221333
     digit_count(136116) ➞ 312332
     digit_count(2) ➞ 1

    Варианты решений

    def digit_count(n):
        n = str(n)
        return int(''.join(str(n.count(i)) for i in n))
    def digit_count(n):
        num_counts = dict()
        str_n = str(n)
      
        for x in str_n:
            if x not in num_counts: num_counts[x] = 1
            else: num_counts[x] += 1
      
        return int( "".join( str(num_counts[x]) for x in str_n ) )

    Понравилась статья? Поделить с друзьями:

    Не пропустите также:

  • Как найти объем прямой шестиугольной пирамиды
  • Как найти sin наименьшего угла
  • Как найти стихи музыка
  • Как украинцу найти работу в казахстане
  • Как составить химическое уравнение реакции соединения

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии