Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 5.00
Vepsar
32 / 32 / 6
Регистрация: 11.08.2011
Сообщений: 158
#1

Определить, повторяются ли цифры в числе - C++

11.08.2011, 11:19. Просмотров 3138. Ответов 43
Метки нет (Все метки)

Нужно ввести число и в результате получить сообщение повторяются цифры в числе или нет.Способ определения может быть любым. Число нужно вводить полностью(не через пробел
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2011, 11:19     Определить, повторяются ли цифры в числе
Посмотрите здесь:

Определить номер цифры в числе - C++
Дано натуральное число. Определить номер некоторой заданной цифры в нем, считая от конца числа. Если такой цифры нет, ответом должно быть...

Определить есть ли равные цифры в числе - C++
Помогите с кодом к этой задаче пожалуйста Определить есть ли равные цифры в числе Заранее большое спасибо.

Определить количество повторений в числе заданной цифры - C++
Дано натуральное число N. Определить кол-во повторений в числе заданной цифры.

Определить, есть ли в трехзначном числе одинаковые цифры - C++
Здравствуйте! Помогите написать программу на С++, чтобы она отображала есть ли в трехзначном числе одинаковые числа. Я сама новичок,...

Определить, есть ли в заданном натуральном числе указанные цифры - C++
В школе задали, кто знает как решить ? Спасибо. Дано натуральное число. Определить, есть ли в нем цифры а и b.

Определить порядковый номер его максимальной цифры в числе - C++
Дано натуральное число, в котором все цифры различны. Определить порядковый номер его максимальной цифры,считая номера от начала числа.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 17:01     Определить, повторяются ли цифры в числе #31
На си можно еще так.
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
bool same_digits_exists( long n){
    for (int digits[10] = {}; n ; n /= 10)
        if (++digits[n % 10] > 1)
            return true;
        return false;
}
int main(){
    long x;
    scanf("%ld", &x);
    printf("%s", same_digits_exists(x) ? "Yes\n" : "No\n");
}
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
11.08.2011, 17:05     Определить, повторяются ли цифры в числе #32
Цитата Сообщение от diagon Посмотреть сообщение
for (int digits[10] =
в си разве так можно?
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
11.08.2011, 17:05     Определить, повторяются ли цифры в числе #33
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от diagon Посмотреть сообщение
Ну просто я объявление и инициализацию стринги в 1 строчке сделал.
Может, конечно....
Вот только зачем ему это? =)
Достаточно всего-лишь считать строку с помощью >> и никаких проблем не будет. Но это выглядит менее загадочно, поэтому я отбросил этот вариант =)
вы недооцениваете потенциальный идиотизм пользователя.

я лично видел секретутку, когда проходил практику, которая при появлении в программе фразы "Нажмите любую кнопку что бы продолжить", нажимала ресет на системнике...
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 17:07     Определить, повторяются ли цифры в числе #34
Цитата Сообщение от PointsEqual Посмотреть сообщение
в с разве так можно?
В си и bool нет в общем-то... =)
Но gcc хавает и ладно.
Пруф.
Код
diagon@shadeware:~$ cat test.cpp && gcc test.cpp -Wall
#include <stdio.h>
bool same_digits_exists( long n){
	for (int digits[10] = {}; n ; n /= 10)
		if (++digits[n % 10] > 1)
			return true;
		return false;
}
int main(){
	long x;
	scanf("%ld", &x);
	printf("%s", same_digits_exists(x) ? "Yes\n" : "No\n");
}
diagon@shadeware:~$

co6ak, убило xD
Сыроежка
Заблокирован
11.08.2011, 17:56     Определить, повторяются ли цифры в числе #35
Цитата Сообщение от PointsEqual Посмотреть сообщение
в си разве так можно?
В С99 так можно. Другое дело, что в С нельзя инициализировать объекты пустым списком, то есть такая инициализация

C++
1
int digits[10] = {};
в С недопустима. Нужно было поместить 0 внутрь фигурных скобок. Что касается true и false, то если включить соответсвующий заголовок <stdbool.h>, то эти символические имена можно использовать в С, так как они просто являются символическими именами целочисленных значенирй 1 и 0. А bool это максро, которое расширяется в _Bool.

Добавлено через 11 минут
Цитата Сообщение от Olga_ Посмотреть сообщение
А так еще более экономно и интересно

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
long Check(long x)
{
   long y;
   int flag[10] = {0};
   y = abs(x);
   while (y && ++flag[y % 10] < 2)
      y /= 10;
   return (y != 0);
}
 
int main()
{
   long x;
   scanf("%d", &x);
   printf("%s\n", Check(x) ? "povt" : "ne povt");
   getchar();
   return 0;
}
Я вас разочарую, но ваш алгоритм не работает! Более того, он может привести к аварийному завершению программы.

Попробуйте передать ему в качестве значения LONG_MIN.
Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
11.08.2011, 18:25     Определить, повторяются ли цифры в числе #36
Цитата Сообщение от Сыроежка Посмотреть сообщение

Я вас разочарую, но ваш алгоритм не работает! Более того, он может привести к аварийному завершению программы.

Попробуйте передать ему в качестве значения LONG_MIN.
Умник какой, все прекрасно работает от LONG_MIN+1 до LONG_MAX.
Сыроежка
Заблокирован
11.08.2011, 18:39     Определить, повторяются ли цифры в числе #37
Цитата Сообщение от Olga_ Посмотреть сообщение
Умник какой, все прекрасно работает от LONG_MIN+1 до LONG_MAX.
Забавно! Это просто вам повезло, что у вас аварийно не завершается программа. Так как выражение y % 10 является отрицательным числом, и вы обращаетесь к своему массивы flag с отрицательным индексом, то есть выходите за границу начала вашего массива.

Чтобы было понятно, я вам представлю упрощенный фрагмент вашего алгоритма

C++
1
2
3
4
5
6
7
8
9
10
void f( long x )
{
   long y = std::abs( x );
 
   do
   {
      std::cout << y % 10 << std::endl;
      y /= y;
   } while ( y );
}
И передайте в эту функцию LONG_MIN.

Кстати сказать, а что делать, если задачу нужно решить для целочисленного типа __int64? Переписывать функцию?
Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
11.08.2011, 18:44     Определить, повторяются ли цифры в числе #38
Цитата Сообщение от Сыроежка Посмотреть сообщение
Забавно! Это просто вам повезло, что у вас аварийно не завершается программа. Так как выражение y % 10 является отрицательным числом, и вы обращаетесь к своему массивы flag с отрицательным индексом, то есть выходите за границу начала вашего массива.

Чтобы было понятно, я вам представлю упрощенный фрагмент вашего алгоритма

C++
1
2
3
4
5
6
7
8
9
10
void f( long x )
{
   long y = std::abs( x );
 
   do
   {
      std::cout << y % 10 << std::endl;
      y /= y;
   } while ( y );
}
И передайте в эту функцию LONG_MIN.
Сыроежка, во первых, все работает, а во вторых, это просто красивый алгоритм, ну нельзя же быть таким дотошным. Да, видно, сразу, вы умный человек, но алгоритм это как красота мысли, его легко переделать, если надо. Еще раз повторю, у меня все работает
Сыроежка
Заблокирован
11.08.2011, 18:50     Определить, повторяются ли цифры в числе #39
Красота мысли - это как раз когда видешь, что алгоритм корректный и универсальный! А когда начинаешь "спотыкаться", то это не представляется красотой.

Красота мысли - это как раз предложенный мной входной итератор, который корректно работает для любого целочисленного типа, и может быть использован с любым стандартным алгоритмом, который принимает входной итератор.
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,505
11.08.2011, 18:51     Определить, повторяются ли цифры в числе #40
C++
1
unsigned long y = abs(x);
решит проблему. За то алгоритм простой и ясный. Мне вот репу почесать пришлось, чтобы что-то непохожее придумать...
Цитата Сообщение от Сыроежка Посмотреть сообщение
y /= y;
А это что вообще? В оригинале такого небыло...
Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
11.08.2011, 18:53     Определить, повторяются ли цифры в числе #41
И диапазон там от LONG_MIN+1 до LONG_MAX.

Если нужен больший диапазон, то можно long long применить. Главное, все красиво и в рабочем состоянии.

Добавлено через 2 минуты
Цитата Сообщение от Сыроежка Посмотреть сообщение
Красота мысли - это как раз когда видешь, что алгоритм корректный и универсальный! А когда начинаешь "спотыкаться", то это не представляется красотой.

Красота мысли - это как раз предложенный мной входной итератор, который корректно работает для любого целочисленного типа, и может быть использован с любым стандартным алгоритмом, который принимает входной итератор.
Сыроежка, вы про свой итератор опять, тогда я пас... Только ко мне с итератором не приставайте, пожалуйста
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,505
11.08.2011, 18:54     Определить, повторяются ли цифры в числе #42
Цитата Сообщение от Сыроежка Посмотреть сообщение
это как раз предложенный мной входной итератор, который корректно работает для любого целочисленного типа, и может быть использован с любым стандартным алгоритмом, который принимает входной итератор...
... И которого так никто в глаза и не увидел. Вы его всё-таки напишите, а то прям философский камень какой-то...
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
11.08.2011, 21:10     Определить, повторяются ли цифры в числе #43
Цитата Сообщение от easybudda Посмотреть сообщение
... И которого так никто в глаза и не увидел. Вы его всё-таки напишите, а то прям философский камень какой-то...

Не по теме:

Да не покажет он. Скорее всего этого итератора нет в природе. Но может быть его "жаба" давит раздавать оригинальную идею...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2011, 22:34     Определить, повторяются ли цифры в числе
Еще ссылки по теме:

Определить, какие цифры встречаются в числе несколько раз - C++
Здравствуйте! Помогите написать программу на С++ Ввести натуральное число и определить, какие цифры встречаются несколько раз. ...

Определить, имеются ли в случайном четырехзначном числе одинаковые цифры - C++
Не получается преобразовать int в string, как это можно сделать? int n,i; string ch; srand(time(0)); n = rand() %...

В четырехзначном числе определить сумму цифр, максимальную и минимальную цифры - C++
нужно вести четырех значное число и определить : 1.Сумму цифр 2.найти максимальное и минимальное цифр 3. является ли число...

Найти количество чисел в заданном диапазоне, которые имеют 3 одинаковые цифры подряд - C++
Задача: Найти количество чисел (на промежутку от 1 до 999999) , которые имеют минимум 3 одинаковые подряд цифры.


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

Или воспользуйтесь поиском по форуму:
Сыроежка
Заблокирован
11.08.2011, 22:34     Определить, повторяются ли цифры в числе #44
Цитата Сообщение от easybudda Посмотреть сообщение
... И которого так никто в глаза и не увидел. Вы его всё-таки напишите, а то прям философский камень какой-то...
У каждого свой философский камень!
Yandex
Объявления
11.08.2011, 22:34     Определить, повторяются ли цифры в числе
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru