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

Проверить, есть ли в записи натурального числа N три одинаковые цифры - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.96
Vital21
Сообщений: n/a
19.06.2012, 10:45     Проверить, есть ли в записи натурального числа N три одинаковые цифры #1
дано натуральное число n. Проверить есть ли в записи числа три одинаковые цифры
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2012, 10:45     Проверить, есть ли в записи натурального числа N три одинаковые цифры
Посмотрите здесь:

Проверить есть ли в массиве одинаковые числа C++
Определить есть ли среди цифр числа одинаковые цифры C++
C++ Выбросить из записи введенного натурального числа n цифры 0 и 5
C++ Проверить, есть ли в записи числа три одинаковые цифры
C++ Если у данного натурального четырехзначного числа все цифры одинаковые, то найти их сумму, в противном случае их произведение
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 11:26     Проверить, есть ли в записи натурального числа N три одинаковые цифры #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string.h>
using namespace std;
char str[100];
int n,x;
string str1=" ";
void poisk(string str1)
{
for (int i=0;i<str1.size();i++)
{
for (int j=i;j<str1.size();j++) {if (str[i]==str[j]&&i!=j) n++;}
if (n==2) x=1;
n=0;   
}
if (x>=1) cout<<"Sodergut"<<endl;
else cout<<"Ne sodergut"<<endl;    
}
 
int main()
{
cout<<"Vvedite chislo - "; cin >>str;
str1=str1+str;
poisk(str1);    
system("PAUSE"); 
return 0;
}
bLesk
 Аватар для bLesk
40 / 40 / 1
Регистрация: 24.11.2009
Сообщений: 165
19.06.2012, 11:30     Проверить, есть ли в записи натурального числа N три одинаковые цифры #3
надеюсь никто смеяться не будет ))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<iostream>
#include<math.h>
using namespace std;
 
int main()
{
    int i=0,count,n,k=0;
    int array[]={11,12,13,14,15,16,17,18,19,20};     //не обращайте внимания :D
    cin>>n;
    while (n > 0)
        {
            array[i]= n % 10;
            i++;
            n = n / 10;
        }
    for (int j = 0; j < 10; j++)
        {
            count=0;
            for (int i = 0; i < 10; i++)
                if (j == array[i])
                    {
                        count++;
                        if (count == 3) k = 1;
                    }
 
        }
    if (k == 1)
        cout<<endl<<"Est"<<endl;
            else cout<<"Net"<<endl;
    system("pause");
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.06.2012, 11:35     Проверить, есть ли в записи натурального числа N три одинаковые цифры #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <map>
#include <algorithm>
 
bool contains_n_equal_digits(const int val, const int n)
{
   std::map<int, int> dict;
   for (int v = val; v; v /= 10)
   {
      ++dict[v % 10];
   }
   return std::find_if(dict.begin(), dict.end(), [n](const std::map<int, int>::value_type& pair)
   {
      return pair.second == n;
   }) != dict.end();
}
 
int main()
{
   const int n = 3;
   int value = 0;
   std::cin >> value;
   if (contains_n_equal_digits(value, n))
   {
      std::cout << "Contains" << std::endl;
   }
   else
   {
      std::cout << "No contains" << std::endl;
   }
}
Bash
1
2
3
forever@pterois:~/My_pro1/cpp_pro$ ./new 
21233245
Contains
bLesk
 Аватар для bLesk
40 / 40 / 1
Регистрация: 24.11.2009
Сообщений: 165
19.06.2012, 11:38     Проверить, есть ли в записи натурального числа N три одинаковые цифры #5
не буду создавать новую тему и спрошу тут, в общем я разбивал число на цифры, и клал их в массив array[], и возникла проблемка, массив типа int, и когда в процессе выполнения работы программы, число делиться на цифры ( и заносится в массив ), возникает неразбериха, ведь в массиве уже содержаться какие то числа, например {8841, 2314, 0 , 214214, 1023, 0, 321, 0} - допустим так, и когда вводишь число "3", естественно что в нем нет трех одинаковых цифр, но в массиве лежат три нуля, и программа скажет - все окей, у вас есть три одинаковых числа. Ломал голову, как бы так массив заполнить, чтобы не было такой проблемы, поэтому сделал довольно тупо:
C++
1
int array[]={11,12,13,14,15,16,17,18,19,20};
понятно, что теперь когда разбиваешь число на цифры, такой неразберихи не получится. Но согласитесь, довольно глупо так делать. Так как же выйти из такой ситуации ? можно массив заполнить какими-то особыми значениями, или использовать например вектор? а если без вектора, и вообще не меняя идею решения задачи (соображал на ходу, возможно я вообще пошел не правильным путем ? ).

Добавлено через 1 минуту
ForEveR
зачем вы в main определяете n = 3, если в кач-ве параметра все равно передаете просто "3" ?
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 11:57     Проверить, есть ли в записи натурального числа N три одинаковые цифры #6
Блеск
А если число будет содержать больше или меньше цифр чем 10? Лучше создавать пустой массив, а в цикле просто прописать размерность массива чтобы не считало пустые ячейки как нули.
bLesk
 Аватар для bLesk
40 / 40 / 1
Регистрация: 24.11.2009
Сообщений: 165
19.06.2012, 11:58     Проверить, есть ли в записи натурального числа N три одинаковые цифры #7
я почти уверен, что все работает =) всего цифр 10 , от 0 до 9
в цикле
C++
1
for (int j = 0; j <10 ; j++ )
как раз я проверяю все эти цифры, т.е. j =0 , j=1, j=2...j=9
и сравниваю с тем что лежит в массиве ( а там такие же цифры)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.06.2012, 12:03     Проверить, есть ли в записи натурального числа N три одинаковые цифры #8
bLesk, Быдлокодерский стиль, не находите?
bLesk
 Аватар для bLesk
40 / 40 / 1
Регистрация: 24.11.2009
Сообщений: 165
19.06.2012, 12:06     Проверить, есть ли в записи натурального числа N три одинаковые цифры #9
ForEveR
вполне, прошу прощения, я только учусь, и буду только рад если меня поправят =)
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
19.06.2012, 12:07     Проверить, есть ли в записи натурального числа N три одинаковые цифры #10
Цитата Сообщение от bLesk Посмотреть сообщение
Так как же выйти из такой ситуации ?
Когда разбиваешь на цифры ты (сам того не желая) подсчитываешь их количество в переменной i. Вот и используй полученное значение как количество инициализированных элементов. Если i получилось меньше трёх, то ответ сразу отрицательный. Если 3 или больше, то в дальнейшем надо проверять не все 10 элементов массива, а столько, сколько их было записано.
bLesk
 Аватар для bLesk
40 / 40 / 1
Регистрация: 24.11.2009
Сообщений: 165
19.06.2012, 12:11     Проверить, есть ли в записи натурального числа N три одинаковые цифры #11
Aesonet
если меньше 10 чисел, то все будет нормально. При больше 10 действительно будут проблемы, но я подумал, что скорее всего есть какое-то ограничение на размер числа.
И я не совсем уловил, как вы собираетесь прописывать в цикле размерность массива, если не знаете заранее какое число введет пользователь? Если не ошибаюсь, можно с вектором так делать, а с массивом как ума не приложу.

Добавлено через 28 секунд
ага понял, спасибо grizlik78
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 12:22     Проверить, есть ли в записи натурального числа N три одинаковые цифры #12
Цитата Сообщение от ForEveR Посмотреть сообщение
bLesk, Быдлокодерский стиль, не находите?
Эм, а что в нём быдлокодерского?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.06.2012, 12:23     Проверить, есть ли в записи натурального числа N три одинаковые цифры #13
Aesonet, Зачем создавать массив на 10 элементов да еще и заполнять его какие-то левыми данными, если можно выделить память под конкретно нужное число элементов?
bLesk
 Аватар для bLesk
40 / 40 / 1
Регистрация: 24.11.2009
Сообщений: 165
19.06.2012, 12:35     Проверить, есть ли в записи натурального числа N три одинаковые цифры #14
А как узнать, сколько вам понадобиться памяти, заранее ?
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 12:36     Проверить, есть ли в записи натурального числа N три одинаковые цифры #15
Спасибо, буду учитывать тож. А в моем коде, нет ничего "быдлокодерского"?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.06.2012, 12:38     Проверить, есть ли в записи натурального числа N три одинаковые цифры #16
Aesonet, Транслит. Странный метод ввода. Работа со строкой.
bLesk, Заранее никак.
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 12:39     Проверить, есть ли в записи натурального числа N три одинаковые цифры #17
Цитата Сообщение от bLesk Посмотреть сообщение
А как узнать, сколько вам понадобиться памяти, заранее ?
Ну я думаю создать функцию в средине которой будет инициироваться массив размер которого будет задаваться в параметре вызова функции.
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
19.06.2012, 12:41     Проверить, есть ли в записи натурального числа N три одинаковые цифры #18
bLesk, ну, если отвлечься от неэффективности твоего алгоритма, то для разбиения на отдельные разряды числа, записанного в переменную int потребуется не более чем std::numeric_limits<int>::digits10 ячеек. Это compile-time значение, так что можно и статический массив делать.
А если число хранится в строке, то его и разбивать не надо, так как оно уже того.
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 12:47     Проверить, есть ли в записи натурального числа N три одинаковые цифры #19
Цитата Сообщение от grizlik78 Посмотреть сообщение
А если число хранится в строке, то его и разбивать не надо, так как оно уже того.
Тут написали что строку использовать нежелательно.
Цитата Сообщение от grizlik78 Посмотреть сообщение
std::numeric_limits<int>::digits10
Что это такое и где про это почитать можно. Часто вижу, понимаю что класс какой-то но не могу понять как с ним работать.

З.Ы. Можете подсказать почему надо так писать:
C++
1
2
3
string str;
char arr[100];
str=str+arr[i]
а не:
C++
1
2
3
string str;
char arr[100];
str+=arr[i]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 13:10     Проверить, есть ли в записи натурального числа N три одинаковые цифры
Еще ссылки по теме:

Проверить, есть ли в трехразрядном числе одинаковые цифры C++
Есть в записи числа m цифры, которые совпадают с цифрами в записи числа n C++
C++ Проверить, есть ли в десятичной записи заданного натурального числа две единицы подряд

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
19.06.2012, 13:10     Проверить, есть ли в записи натурального числа N три одинаковые цифры #20
Цитата Сообщение от Aesonet Посмотреть сообщение
Что это такое и где про это почитать можно.
Класс, который описывает характеристики различных встроенных типов. Определяется в заголовке <limits>
Я читал у Джосьютиса, думаю ещё где-нибудь можно почитать.
http://en.cppreference.com/w/cpp/types/numeric_limits

Добавлено через 12 минут
Правда я посмотрел, а std::numeric_limits<int>::digits10 даёт число на 1 меньше, чем количество десятичных цифр в максимальном числе. Надо будет и самому ещё разок почитать. Стандарт
Yandex
Объявления
19.06.2012, 13:10     Проверить, есть ли в записи натурального числа N три одинаковые цифры
Ответ Создать тему
Опции темы

Текущее время: 07:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru