Vital21
1

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

19.06.2012, 10:45. Показов 7583. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
дано натуральное число n. Проверить есть ли в записи числа три одинаковые цифры
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2012, 10:45
Ответы с готовыми решениями:

Проверить, есть ли в записи числа три одинаковые цифры
Дано натуральное число N. Проверить, есть ли в записи числа три одинаковые цифры.

Проверить, есть ли в записи числа три одинаковые цифры
Дано натуральное число n. Проверить, есть ли в записи числа три одинаковые цифры (n<9999).

Проверить, есть ли в записи числа три одинаковых цифры. Найти все делители натурального числа
1. Дано натуральное число n. Проверить, есть ли в записи числа три одинаковых цифры (n<=9999). 2....

Дано натуральное число n. Проверить, есть ли в записи числа три одинаковые цифры (n < 9999).
Дано натуральное число n. Проверить, есть ли в записи числа три одинаковые цифры (n &lt; 9999).

19
24 / 24 / 10
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 11:26 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;
}
0
42 / 42 / 8
Регистрация: 24.11.2009
Сообщений: 165
19.06.2012, 11:30 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");
}
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
19.06.2012, 11:35 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
0
42 / 42 / 8
Регистрация: 24.11.2009
Сообщений: 165
19.06.2012, 11:38 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" ?
1
24 / 24 / 10
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 11:57 6
Блеск
А если число будет содержать больше или меньше цифр чем 10? Лучше создавать пустой массив, а в цикле просто прописать размерность массива чтобы не считало пустые ячейки как нули.
0
42 / 42 / 8
Регистрация: 24.11.2009
Сообщений: 165
19.06.2012, 11:58 7
я почти уверен, что все работает =) всего цифр 10 , от 0 до 9
в цикле
C++
1
for (int j = 0; j <10 ; j++ )
как раз я проверяю все эти цифры, т.е. j =0 , j=1, j=2...j=9
и сравниваю с тем что лежит в массиве ( а там такие же цифры)
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
19.06.2012, 12:03 8
bLesk, Быдлокодерский стиль, не находите?
0
42 / 42 / 8
Регистрация: 24.11.2009
Сообщений: 165
19.06.2012, 12:06 9
ForEveR
вполне, прошу прощения, я только учусь, и буду только рад если меня поправят =)
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
19.06.2012, 12:07 10
Цитата Сообщение от bLesk Посмотреть сообщение
Так как же выйти из такой ситуации ?
Когда разбиваешь на цифры ты (сам того не желая) подсчитываешь их количество в переменной i. Вот и используй полученное значение как количество инициализированных элементов. Если i получилось меньше трёх, то ответ сразу отрицательный. Если 3 или больше, то в дальнейшем надо проверять не все 10 элементов массива, а столько, сколько их было записано.
1
42 / 42 / 8
Регистрация: 24.11.2009
Сообщений: 165
19.06.2012, 12:11 11
Aesonet
если меньше 10 чисел, то все будет нормально. При больше 10 действительно будут проблемы, но я подумал, что скорее всего есть какое-то ограничение на размер числа.
И я не совсем уловил, как вы собираетесь прописывать в цикле размерность массива, если не знаете заранее какое число введет пользователь? Если не ошибаюсь, можно с вектором так делать, а с массивом как ума не приложу.

Добавлено через 28 секунд
ага понял, спасибо grizlik78
0
24 / 24 / 10
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 12:22 12
Цитата Сообщение от ForEveR Посмотреть сообщение
bLesk, Быдлокодерский стиль, не находите?
Эм, а что в нём быдлокодерского?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
19.06.2012, 12:23 13
Aesonet, Зачем создавать массив на 10 элементов да еще и заполнять его какие-то левыми данными, если можно выделить память под конкретно нужное число элементов?
1
42 / 42 / 8
Регистрация: 24.11.2009
Сообщений: 165
19.06.2012, 12:35 14
А как узнать, сколько вам понадобиться памяти, заранее ?
0
24 / 24 / 10
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 12:36 15
Спасибо, буду учитывать тож. А в моем коде, нет ничего "быдлокодерского"?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
19.06.2012, 12:38 16
Aesonet, Транслит. Странный метод ввода. Работа со строкой.
bLesk, Заранее никак.
0
24 / 24 / 10
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 12:39 17
Цитата Сообщение от bLesk Посмотреть сообщение
А как узнать, сколько вам понадобиться памяти, заранее ?
Ну я думаю создать функцию в средине которой будет инициироваться массив размер которого будет задаваться в параметре вызова функции.
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
19.06.2012, 12:41 18
bLesk, ну, если отвлечься от неэффективности твоего алгоритма, то для разбиения на отдельные разряды числа, записанного в переменную int потребуется не более чем std::numeric_limits<int>::digits10 ячеек. Это compile-time значение, так что можно и статический массив делать.
А если число хранится в строке, то его и разбивать не надо, так как оно уже того.
1
24 / 24 / 10
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 12:47 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]
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
19.06.2012, 13:10 20
Цитата Сообщение от Aesonet Посмотреть сообщение
Что это такое и где про это почитать можно.
Класс, который описывает характеристики различных встроенных типов. Определяется в заголовке <limits>
Я читал у Джосьютиса, думаю ещё где-нибудь можно почитать.
http://en.cppreference.com/w/c... ric_limits

Добавлено через 12 минут
Правда я посмотрел, а std::numeric_limits<int>::digits10 даёт число на 1 меньше, чем количество десятичных цифр в максимальном числе. Надо будет и самому ещё разок почитать. Стандарт
0
19.06.2012, 13:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.06.2012, 13:10
Помогаю со студенческими работами здесь

Дано натуральное число n. Проверить, есть ли в записи числа три одинаковые цифры (n ≤ 9999)
Помогите пожалуйста разобраться с задачей: Дано натуральное число n. Проверить, есть ли в записи...

Проверить, есть ли в записи числа m цифры, одинаковые с цифрами в записи числа n
Даны два натуральных числа m и n. (m,n ≤ 9999). Проверить, есть ли в записи числа m цифры,...

Проверить, есть ли в записи числа m цифры, одинаковые с цифрами в записи числа n
Даны два натуральных числа m и n (m &lt; или = 9999, n &lt; или = 9999). Про¬верить, есть ли в записи...

Проверить, есть ли в записи числа три одинаковых цифры (N ≤ 9999)
Помогите плиз, надо программу написать в WF(можно и в консоли, под WF сам переделаю) на C#, заранее...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru