Как найти одинаковые числа в числе

Написал программу, по нахождению одинаковых цифр в числе. Не могу найти ошибку
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, в 01:21

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

28 мая 2023, в 22:23

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

28 мая 2023, в 21:40

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

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

ПЛАН-КОНСПЕКТ

учебного занятия кружка «Компьютер и информационные технологии»

Тема учебного занятия: «Определение одинаковых цифр в заданном пользователем трёхзначном (четырёхзначном) числе (язык программирования Pascal)».

Цель учебного занятия: научить составлять программы с использованием условного оператора, с применением арифметической функции int(x) и с применением логических операций в Pascal.

Задачи учебного занятия:

Образовательные:

  • сформировать знания о полной и краткой формах условного оператора в языке программирования Pascal;

  • сформировать умения составлять программы с использованием арифметических функций и логических операций языка программирования Pascal.

Развивающие: развивать познавательные, интеллектуальные и творческие способности обучающихся;

Воспитательные: воспитывать информационную культуру обучающихся, самостоятельность, внимательность, дисциплинированность.

Методы работы: беседа, практическая работа на ПК.

Формы работы: индивидуальная.

Оборудование: персональные компьютеры, доска, мел.

Программное обеспечение: операционная система Windows7, язык программирования Pascal.

Дидактические материалы: карточки с заданиями.

План.

  1. Организационный этап.

  2. Активизация имеющихся знаний обучающихся. Постановка цели и задач учебного занятия. Мотивация учебной деятельности обучающихся.

  3. Изучение нового материала (формирование новых знаний).

  • понятие условного оператора полной и краткой формы;

  • ознакомление с арифметическими функциями языка программирования Pascal;

  • ознакомление с логическими операциями языка программирования Pascal.

  1. Практическая работа.

  2. Рефлексия (подведение итогов учебного занятия).

Ход учебного занятия.

  1. Организационный этап.

Приветствие, проверка присутствующих. Текущий инструктаж по технике безопасности.

  1. Активизация имеющихся знаний обучающихся. Постановка цели и задач учебного занятия. Мотивация учебной деятельности обучающихся.

а )методом фронтального опроса:

1. На какие основные части разделяется программа, пишущаяся на языке программирования Pascal? (на три основные части: заголовок программы, раздел объявления величин, тело программы);

2. Каким служебным словом обозначается название программы? (Program);

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

4. Какой оператор предваряет раздел объявления переменных? (оператор Var);

5. Как выглядит запись объявления раздела переменных ?

(Var : ;) ;

6. Каким служебным словом записывается начало тела программы? (Begin);

б) методом решения задач:

Задание №1

Найти ошибки в программах:

а) Написать программу на Pascal, вычисляющую площадь круга.

Program Z1;

Var R,S: integer;

Begin;

Read (R);

S=3,14*SQR(R);

Write (S);

End

б) Написать программу, вычисляющую значение функции у=у1-у2, если у1= 2.5х, а у2=5+х;

Program Z2;

Var x,y,y1,y2: Real;

Begin;

Write (x);

y:= y1- у2;

y1:=2.5*x;

у2=5+х;

Read (y);

End.

  1. Изучение нового материала (формирование новых знаний).

В языке программирования Pascal предусмотрены следующие основные арифметические функции:

АРИФМЕТИЧЕСКИЕ ФУНКЦИИ (ОСНОВНЫЕ)

Функция

Назначение

Тип результата

abs (x)

абсолютное значение аргумента

совпадает с типом аргумента

sqr (x)

квадрат аргумента

совпадает с типом аргумента

sqrt (x)

квадратный корень аргумента

вещественный

cos (x)

косинус аргумента

вещественный

sin (x)

синус аргумента

вещественный

arctan (x)

арктангенс аргумента

вещественный

exp (x)

ex

вещественный

ln (x)

натуральный логарифм

вещественный

int (x)

целая часть числа

вещественный

frac (x)

дробная часть числа

вещественный

В языке программирования Pascal предусмотрены следующие логические операции:

true xor true = false
true xor false = true
false xor true = true
false xor false = false

  • Конъюнкция (логическое умножение, пересечение) — and. Выражение a and b дает значение true только в том случае, если a и b имеют значение true. Во всех остальных случаях значения выражения a and b дает false.

  • true and true = true

  • true and false = false

  • false and true = false

false and false = false

  • Дизъюнкция (логическое сложение, объединение) – or. Выражение a or b дает значение false только в том случае, если a и b имеют значение false. Во всех остальных случаях результат – true.

  • true or true = true

  • true or false = true

  • false or true = true

false or false = false

  • Отрицание (инверсия) – not. Выражение not a имеет значение, противоположное значению a.

  • not true = false

not false = true

  • Исключающее ИЛИ – xor. Выражение a xor b дает значение true только в том случае, когда только один из операндов имеет значение true.

Последовательность выполнения логических операторов: not, and, or.

В языке Паскаль сначала выполняются логические операторы (and, or, xor, not), а уже потом операторы отношений (, =, , =), поэтому не нужно забывать расставлять скобки в сложных логических выражениях.

Далее мы переходим к изучению раздела «Алгоритмы ветвления».

Для решения такого типа задач необходимо узнать как выглядит блок оператора условия в графическом способе представления алгоритмов:

Блок-схема неполной формы оператора условия:

В неполном ветвлении ветвь Else отсутствует.
На рисунке показана блок схема оператора if-then.

If условие

Then [оператор1]

Блок-схема полной формы оператора условия:

На рисунке показана блок-схема полной формы оператора.

If условие

Then [оператор1]

Else [оператор2];

  1. Практическая работа.

Задача 1. Определить есть ли среди цифр заданного трёхзначного числа одинаковые.

Решение задачи1.

program z28; {заголовок программы}

uses crt; {подключение библиотек}

var k,n,c,p:real; {описание переменных, которые используются в программе}

begin

clrscr;

writeln(’Задайте трёхзначное число’);

readln(n);

k:=n-int(n/10)*10;{определяем число единиц}

n:=int(n/10);{от исходного числа отбрасываем число единиц}

c:=n-int(n/10)*10; {определяем число десятков}

n:=int(n/10);{от исходного числа отбрасываем число десятков}

p:=n-int(n/10)*10; {определяем число сотен}

if (k=c) and (c=p) then writeln(’Три одинаковых’) else

begin

if (k=c) or (c=p) or (p=k) then writeln(’Два одинаковых’)

else writeln(’Нет одинаковых’);

if (p=c) then writeln(’Одинаковы первое и второе’);

if (c=k) then writeln(’Одинаковы второе и третье’);

if (p=k) then writeln(’Одинаковы первое и третье’);

end;

readkey;

end.

Задача 2. Определить есть ли среди цифр заданного четырёхзначного числа одинаковые.

Решение задачи2.

program z29; {заголовок программы}

uses crt; {подключение библиотек}

var k,n,c,p,l:real; {описание переменных, которые используются в программе}

begin

clrscr;

writeln(’Задайте четырёхзначное число’);

readln(n);

k:=n-int(n/10)*10;{определяем число единиц}

n:=int(n/10);{от исходного числа отбрасываем число единиц}

c:=n-int(n/10)*10; {определяем число десятков}

n:=int(n/10);{от исходного числа отбрасываем число десятков}

p:=n-int(n/10)*10; {определяем число сотен}

n:=int(n/10);{от исходного числа отбрасываем число сотен}

l:=n-int(n/10)*10; {определяем число тысяч}

if (l=p) and (p=c) and (c=k) then writeln(’Четыре одинаковых’) else

begin

if ((k=c) and (c=p)) or ((k=p) and (p=l)) or ((c=p) and (p=l)) then writeln(’Три одинаковых’) else

begin

if (k=c) or (c=p) or (p=k) or (l=k) or (c=l) or (l=p)) then writeln(’Два одинаковых’) else writeln(’Нет одинаковых’);

if (l=p) then writeln(’Одинаковы первое и второе’);

if (p=c) then writeln(’Одинаковы второе и третье’);

if (c=k) then writeln(’Одинаковы третье и четвёртое’);

if (l=c) then writeln(’Одинаковы первое и третье’);

if (l=k) then writeln(’Одинаковы первое и четвёртое’);

if (p=k) then writeln(’Одинаковы второе и четвёртое’);

end;

end;

readkey;

end.

  1. Рефлексия (подведение итогов учебного занятия).

Закрепление изученного материала — демонстрация выполненных работ обучающихся.

Цель нашего учебного занятия выполнили?

Самостоятельно оцените себя.

В некоторых задачах требуется определить, одинаковые ли цифры в числе или нет. Сделать это можно при помощи следующей функции:

bool isOnesNumber(int N)
{
	int d=0, dold =0;
	dold = N % 10;
	while (N != 0)
	{
		d = N % 10;
		if (d != dold)
		{
			return false;
		}
		N = N / 10;
		dold = d;
	}
	return true;
}


Идея: Каждая цифра в числе равна предыдущей, и если все равны тогда число состоит из одних и тех же цифр.

Тогда нужно сравнивать с предыдущей. У меня это dold. Сначала я вношу в него первое число, потом в цикле перебираю числа, если d не сошлось с dold, дальше можно не проверять, в числе встретилось «левое» число. Если все прошли, а условие не выполнилось, тогда число действительно состоит из одинаковых цифр :)

Одинаковые цифры введенного числа

Уровень сложности:






  • Задание
  • Решение

Составить алгоритм определяющий, есть ли среди цифр введенного трехзначного числа — одинаковые. Число вводится с клавиатуры.

Опять же, научитесь пользоваться операцией — остаток от деления, тогда сможете легко написать эту программу. Отделив разряды трехзначного числа, воспользуйтесь оператором выбора if else, для сравнения отделённых цифр. У вас должно получиться нечто подобное:

#include <iostream>
using namespace std;
int main()
{
	setlocale (LC_ALL, "RUS");
	cout<<"tttОдинаковые цифры введенного числаnn";
	int a;
	cout<<"Введите трехзначное число: ";
	cin>>a;
	cout<<"n";
	if (a>=0&&a<=99)
	{
		cout<<"Вы ввели неверное число. Число должно быть трехзначным.nn";
	}
	else{
		if (a>=1000)
	{
		cout<<"Вы ввели неверное число. Число должно быть трехзначным.nn";
	}
	else{
		if (((a/100)%10)==((a/10)%10)||((a/10)%10)==(a%10)||((a/100)%10)==(a%10))	
	{
		cout<<"Среди цифр введенного трехзначного числа "<<a<<" есть одинаковыеn";
	}
	else
	{
		cout<<"Среди цифр введенного трехзначного числа "<<a<<" нет одинаковыхn";
	}
	cout<<endl;
	return 0;
	}
	}
}

Результат работы программы:

CppStudio.com

    			Одинаковые цифры введенного числа

Введите трехзначное число: 334

Среди цифр введенного трехзначного числа 334 есть одинаковые

Следующие статьи помогут вам в решении данной задачи:

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.

Понравилась статья? Поделить с друзьями:
  • Как найти кусок обоев
  • Как найти rобщ в параллельной цепи
  • Симс 4 как найти лягушек
  • Как составить план дачного домика
  • Как найти нефриты в геншине