Написал программу, по нахождению одинаковых цифр в числе. Не могу найти ошибку
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
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
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
asanisimovasanisimov
1,4564 серебряных знака12 бронзовых знаков
3
Improve Article
Save Article
Like Article
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: YesInput: 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 =
=> Sum =
=> Sum =
-> 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
На вход получаем два числа, 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 мар.
-
447 просмотров
(Ответ сгенерирован искусственным интеллектом!)
Вы можете решить эту задачу, преобразовав каждое число в строку, а затем использовать метод 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....
А потом — отфильтровать те которые не заходят в заявленный диапазон.
-
Показать ещё
Загружается…
25 мая 2023, в 22:01
2000 руб./за проект
25 мая 2023, в 22:00
500 руб./за проект
25 мая 2023, в 20:52
2500 руб./за проект
Минуточку внимания
0 / 0 / 0 Регистрация: 07.04.2020 Сообщений: 66 |
|
1 |
|
Есть ли в числе совпадающие цифры13.10.2020, 08:55. Показов 13269. Ответов 3
Пользователь вводит четырёхзначное число. Программа выводит 1 , если в числе есть совпадающие цифры, иначе — любое другое число.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
13.10.2020, 08:55 |
3 |
ioprst 1303 / 843 / 409 Регистрация: 12.03.2018 Сообщений: 2,305 |
||||
13.10.2020, 09:37 |
2 |
|||
Решение
0 |
Gdez 7258 / 4047 / 1780 Регистрация: 27.03.2020 Сообщений: 6,874 |
||||
13.10.2020, 09:52 |
3 |
|||
0 |
Рыжий Лис Просто Лис 5092 / 3259 / 1008 Регистрация: 17.05.2012 Сообщений: 9,551 Записей в блоге: 9 |
||||
13.10.2020, 10:00 |
4 |
|||
0 |
Первоначальное решение:
# Программа должна вывести «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')