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

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

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

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

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

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

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

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

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

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

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

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

43
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
11.08.2011, 12:08 #16
Цитата Сообщение от Vepsar Посмотреть сообщение
Dani, больше всего понятен твой вариант СПС.
А можно переделать чтоб небыло std: и True/false
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
int main()
{
    int n,a[10]={0},isp=0;
    cin >> n;
    while (n != 0)
    {
          a[n%10]++;
          if (a[n%10]>1) isp=1;
          n /= 10;
    }
    
    if (isp==1)
    {
    cout << "Povt. chifry - ";
    for (int i=0; i<10; i++)
    if (a[i]>1) cout << i << " ";
    }
    else cout << "Povt chifr net";
    return 0;
}
1
LosAngeles
Заблокирован
11.08.2011, 12:14 #17
Цитата Сообщение от Kastaneda Посмотреть сообщение
LosAngeles, а на каком компиляторе у тебя подобные циклы поддерживаются? У меня не MSVS 2010, не последний g++ не компилируют.
ни на каком, это я на будущее написал)
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
11.08.2011, 12:22 #18
А так еще более экономно и интересно

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;
}
0
Vepsar
32 / 32 / 6
Регистрация: 11.08.2011
Сообщений: 158
11.08.2011, 12:23  [ТС] #19
Спасиб всем все заработало !!!!!!!!
(ща еще тему создам может быть)
0
Kastaneda
11.08.2011, 12:37
  #20

Не по теме:

LosAngeles, там кстати, если я не ошибаюсь, вместо символа ";" должен быть ":"

0
Сыроежка
Заблокирован
11.08.2011, 14:19 #21
Как-то в другой теме, связанной с разбиением числа на цифры я говорил, что все подобные задачи решаются универсальным способом: написанием входного итератора, который возвращает очередную цифру числа. Если такой итератор написать, то любая подобная задача решается очень просто. Конеяно этот подход не для студентов, которым нужно быстро сделать какую-то частную задачу.
Здесь я поокажу, как выглядет код, когда имеется подобный итератор. Я пропущу заголовочные файлы, чтобы меньше нужно было вводить кода

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main()
{
   long x;
 
   std::cin >> x;
 
   long digits[10] = {};
 
   bool repeat = false;
 
   usr::digital_iterator<long> first( x ), last;
   for ( ; first != last ; ++ first )
   {
      if ( ( repeat = ++digits[*first] > 1 ) == true ) break;
   }
 
   if ( repeat ) std::cout << "Digit " << *first << " is repeated\n";
   else std::cout << "There is no repeated digit\n";
 
   return ( 0 );
}
Преимущество такого подхода состоит в том, что вы лишь один раз пишите подобный входной итератор и с помощью него можете решить любую задачу, где требуется разложение числа на цифры. Более того вы можете с этим итераторм использовать любой алгоритм!
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 15:02 #22
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <algorithm>
#include <iterator>
int main(){
    std::string str(std::istream_iterator<char>(std::cin), std::istream_iterator<char>() );
    bool is_unique = true;
    std::for_each(str.begin() + 1, str.end(), [&](const char ch){ static char prev = str[0]; if (ch == prev) is_unique = false;     prev = ch; } );
    std::cout << std::boolalpha << is_unique << std::endl;
}
0
Сыроежка
Заблокирован
11.08.2011, 15:19 #23
Цитата Сообщение от diagon Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <algorithm>
#include <iterator>
int main(){
    std::string str(std::istream_iterator<char>(std::cin), std::istream_iterator<char>() );
    bool is_unique = true;
    std::for_each(str.begin() + 1, str.end(), [&](const char ch){ static char prev = str[0]; if (ch == prev) is_unique = false;     prev = ch; } );
    std::cout << std::boolalpha << is_unique << std::endl;
}
Интересный нестандартный код. Но у меня такой вопрос, выдаст ли он правильный результат для числа, например, 121? Ведь у вас идет сравнение текущего символа только с предыдущим?
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 15:26 #24
Цитата Сообщение от Сыроежка Посмотреть сообщение
Интересный нестандартный код. Но у меня такой вопрос, выдаст ли он правильный результат для числа, например, 121? Ведь у вас идет сравнение текущего символа только с предыдущим?
Нет.
Я так понял задание - выяснить, имеются ли в числе одинаковые цифры, стоящие рядом.
Если нужно выяснить, если ли одинаковые цифры в числе вообще - для этой цели очень хорошо подходит map =)
0
Сыроежка
Заблокирован
11.08.2011, 15:46 #25
Цитата Сообщение от diagon Посмотреть сообщение
Нет.
Я так понял задание - выяснить, имеются ли в числе одинаковые цифры, стоящие рядом.
Если нужно выяснить, если ли одинаковые цифры в числе вообще - для этой цели очень хорошо подходит map =)
В вашем решении существует еще одна проблема: оно не имеет дело именно с числом. Вы рассматриваете любые символы. А если пользователь вообще ничего не ввел, то в вашем решении имеется серьезная ошибка.
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 15:50 #26
Цитата Сообщение от Сыроежка Посмотреть сообщение
В вашем решении существует еще одна проблема: оно не имеет дело именно с числом. Вы рассматриваете любые символы. А если пользователь вообще ничего не ввел, то в вашем решении имеется серьезная ошибка.
Проблема есть, но другая.
Пользователь не сможет ничего не ввести, ибо для окончания ввода нужно ввести EOF =)
Такова цена инициализации стринга итераторами...
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
11.08.2011, 15:53 #27
Цитата Сообщение от Сыроежка Посмотреть сообщение
В вашем решении существует еще одна проблема: оно не имеет дело именно с числом. Вы рассматриваете любые символы. А если пользователь вообще ничего не ввел, то в вашем решении имеется серьезная ошибка.
Цитата Сообщение от Vepsar Посмотреть сообщение
Нужно ввести число
Поэтому не может быть ничего
0
Сыроежка
Заблокирован
11.08.2011, 16:25 #28
Цитата Сообщение от diagon Посмотреть сообщение
Проблема есть, но другая.
Пользователь не сможет ничего не ввести, ибо для окончания ввода нужно ввести EOF =)
Такова цена инициализации стринга итераторами...
Я не понял вашу фразу о "цене инициализации строк", но разве пользователь не может сразу же ввести EOF, и у вас получится пустая строка, итератор для которой вы в алгоритме std::for_each увеличиваете на 1?
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 16:36 #29
Цитата Сообщение от Сыроежка Посмотреть сообщение
Я не понял вашу фразу о "цене инициализации строк", но разве пользователь не может сразу же ввести EOF, и у вас получится пустая строка, итератор для которой вы в алгоритме std::for_each увеличиваете на 1?
Ну просто я объявление и инициализацию стринги в 1 строчке сделал.
Может, конечно....
Вот только зачем ему это? =)
Достаточно всего-лишь считать строку с помощью >> и никаких проблем не будет. Но это выглядит менее загадочно, поэтому я отбросил этот вариант =)
0
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,775
11.08.2011, 16:49 #30
Цитата Сообщение от Сыроежка Посмотреть сообщение
usr::digital_iterator
А реализация этого чуда будет, не?

До кучи ещё вариант:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
    
int have_same_digits(unsigned x){
    unsigned digit = x % 10, number = x;
    
    if ( number < 10 )
        return 0;
    while ( number /= 10 )
        if ( number % 10 == digit )
            return 1;
    
    return have_same_digits(x / 10);
}
 
int main(void){
    int num;
    
    while ( printf("Number: ") && scanf("%d", &num) == 1 )
        printf("Number %d %shave same digits.\n", num, ( have_same_digits(abs(num)) ) ? "" : "don't ");
    
    exit(0);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2011, 16:49
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
11.08.2011, 16:49
Ответ Создать тему
Опции темы

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