Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
grrrrr
45 / 45 / 13
Регистрация: 21.04.2009
Сообщений: 265
#1

Определить, содержит ли 4-х значное число 3 одинаковые цифры. - C++

12.08.2009, 13:30. Просмотров 2756. Ответов 21
Метки нет (Все метки)

Я сортирую, а потом сравниваю, но что то не работает

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
32
33
34
35
36
37
38
char* mas(char* a, int s);
 
int main(int argc, char *argv[])
{
    const int size=100;
    char arr[size];
    int i, k;
    cout << "Write number: ";
    cin.getline(arr, size);
    k=strlen(arr);    
    mas(arr, k);
    if((arr[0]==arr[1]==arr[2]) || (arr[1]==arr[2]==arr[3]))
       cout << "V chisle esti 3 odinakovih!\n";
    else 
       cout << "qweqeeqwe\n";
//    for(i=0; i<k; i++)
//       cout << arr[i] << " ";    
      
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
char* mas(char* a, int s)
{
      int i, j, tmp;
      for(i=0; i<s; i++)
      {
               for(j=0; j<s-1-i; j++)
               {
                        if(a[j] > a[j+1])
                        {
                                tmp=a[j];
                                a[j] = a[j+1];
                                a[j+1] = tmp;
                        }
               }
      }
}

http://www.cyberforum.ru/cpp-beginners/thread825858.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2009, 13:30
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определить, содержит ли 4-х значное число 3 одинаковые цифры. (C++):

Определить, верно ли, что заданное натуральное число содержит ровно три одинаковые цифры
Решите задачу дано натуральное число n n 10000 определить, верно ли, что это...

Дано натуральное четырехзначное число n. Верно ли что это число содержит три одинаковые цифры
Дано натуральное четырехзначное число n. Верно ли что это число содержит три...

Дано натуральное четырехзначное число n.верно ли что это число содержит три одинаковые цифры
дано натуральное четырехзначное число n.верно ли что это число содержит три...

Верно ли, что число содержит ровно три одинаковые цифры?
Верно ли, что это число содержит ровно три одинаковые цифры, как, например,...

Определить, входят ли в 4-х значное число цифры 2 или 7. Не работает ветка else
Добрый вечер. Условие: Дано четырехзначное число. Определить входят ли в него...

21
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
12.08.2009, 13:40 #2
так не проще?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool soderzhitLi (const char *arr){
  int digitCounters [10];
  int sz = strlen(arr); 
  int i;
  bool retValue = false;
 
  ::memset ((void*)digitCounters, 0, sizeof (digitCounters));
 
  for (i = 0; i < sz; i++){
    *(digitCounters+(*(arr+i)-'0')++;
  }
 
  for (i = 0; i < 10; i++){
    if (*(digitCounters+i) > 2){
      retValue = true;
      break;
    }
  }
  return retValue;
}
еще нужно бы проверять, действительно ли там цифры, а то *(digitCounters+(*(arr+i)-'0')++; не рассчитано на что-то другое.
0
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
12.08.2009, 13:42 #3
Определить, содержит ли 4-х значное число 3 одинаковые цифры.
подряд, или вообще?
0
FunDuck
688 / 379 / 51
Регистрация: 22.01.2009
Сообщений: 1,135
12.08.2009, 13:44 #4
C++
1
if((arr[0]==arr[1] && arr[1]==arr[2]) || (arr[1]==arr[2] && arr[2]==arr[3]))
1
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
12.08.2009, 13:45 #5
А почему ты сравниваешь именно первые 3 числа?
например, у тебя было введено число 12322, ты сортируешь по возрастанию, в итоге
получается 12223... Как видно, число содержит 3 одинаковых числа, но функция выдаст отрицательный ответ...

Здесь есть такой вариант: если хочешь все же через сортировку, то пробегаешь всю отсортированную строку на предмет одинаковых чисел...
0
grrrrr
45 / 45 / 13
Регистрация: 21.04.2009
Сообщений: 265
12.08.2009, 13:49  [ТС] #6
Цитата Сообщение от Rififi Посмотреть сообщение
подряд, или вообще?
не важно в каком порядке.

Добавлено через 2 минуты 57 секунд
FunDuck, сработало спасибо! но почему мой вариант не подошел? ведь по логике должно работать!
0
Monte-Cristo
2794 / 1380 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.08.2009, 13:49 #7
лучше сделать так
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
#include <iostream>
using namespace std;
 
int main()
{
    int n;
    int kol[10];
 
    memset(kol, 0, sizeof(kol));
 
    cout << "please, enter the number -> ";
    cin >> n;
 
    while (n>0)
    {
        kol[n%10]++;
        n /= 10;
    }
 
    for (int i=0; i<10; i++)
        if (kol[i]>=3) cout << "This number is " << i << endl;
 
    system("pause");
    return 0;
}
1
grrrrr
45 / 45 / 13
Регистрация: 21.04.2009
Сообщений: 265
12.08.2009, 13:50  [ТС] #8
Haster, речь идет о 4-х значном числе. Но можно улучшить! Надо подумать только! Пока додумался до этого!
0
FunDuck
688 / 379 / 51
Регистрация: 22.01.2009
Сообщений: 1,135
12.08.2009, 13:51 #9
Не совсем. Смотри: arr[0]==arr[1]==arr[2] вот что было у тебя... т.е. ты сначала срвниваешь arr[0]==arr[1]... результатом этого может быль либо 0 либо 1, т.е. либо они равны либо нет. Получается что ты сравниваешь arr[2] с нолем или единицей. Если расписать твой условие, то получится чтото вроде такого : (arr[0] == arr[1] && (1 или 0) == arr[2])
1
TAVulator
3950 / 1109 / 160
Регистрация: 27.07.2009
Сообщений: 3,457
12.08.2009, 13:59 #10
а можно сделать без переменных и циклов. Я плохо знаю Си, поэтому написал на паскале:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Const
 A = 1333;
Begin
 If ((A div 100)mod 11)<>0 then
  If ((A mod 100)mod 11)<>0 then
   Writeln('NO') else
  If ((A mod 10)=(A div 1000))or
     ((A mod 10)=((A div 100)mod 10)) then
   Writeln('YES') else
  else
 If ((A div 1000)=(A mod 10))or
    ((A div 1000)=((A mod 100)div 10)) then
   Writeln('YES') else
   Writeln('NO');
End.
0
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
12.08.2009, 14:03 #11
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 "stdafx.h"
#include <iostream>
 
int main()
{
    int ch;
    std::cin>>ch;
    int i(0);
    int mas[10]= {0};
    while(i < 4)
    {
        mas[ch%10]++,i++;
        ch /= 10;
    }
    for(int i =0; i < 10; ++i)
        if(mas[i]>=3)
        {
            std::cout<<"true";
            break;
        }
        else
            if(i == 9)
                std::cout<<"false";
    system("pause");
    return 0;
}
Добавлено через 1 минуту 4 секунды
Граф меня опередил
2
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
12.08.2009, 14:11 #12
grrrrr,
не важно в каком порядке.
тогда всё приведенное выше работать на будет, например вот для такого числа: 1121

тогда типа так:
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
32
33
#include <set>
#include <algorithm>
#include <iostream>
#include <locale>
#include <boost/bind.hpp>
 
bool have_three_equal_digits(int i)
{
    typedef std::multiset<int> X;
    X x;
 
    for ( ; i; i/=10)
        x.insert(i%10);
 
    return std::find_if(
        x.begin(), x.end(),
        boost::bind(&X::count, boost::ref(x), _1) >= 3u
        ) != x.end();
};
 
void print(int i)
{
    std::cout << "Число " << i << (!have_three_equal_digits(i) ? " не " : " ") <<
        "содержит 3 одинаковые цифры" << std::endl;
}
 
int main()
{
    setlocale(LC_ALL, "");
    print(1121);
    print(1123);
    return 0;
}
Вывод:
Число 1121 содержит 3 одинаковые цифры
Число 1123 не содержит 3 одинаковые цифры
Добавлено через 1 минуту 54 секунды
поправочка: вышеприведенное до моего тогдашнего поста... (:
0
Monte-Cristo
12.08.2009, 14:12
  #13

Не по теме:

Цитата Сообщение от M128K145 Посмотреть сообщение
Граф меня опередил
главное что не поленился, и решил разобраться сам

0
grrrrr
45 / 45 / 13
Регистрация: 21.04.2009
Сообщений: 265
12.08.2009, 17:04  [ТС] #14
M128K145, а что значит запись в 8 сточке

C++
1
int i(0);
инициализация?
0
Monte-Cristo
2794 / 1380 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.08.2009, 17:06 #15
Цитата Сообщение от grrrrr Посмотреть сообщение
инициализация?
да. это аналогично
C++
1
int i = 0;
1
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
12.08.2009, 17:06 #16
да, старый вид обьявления переменной с инициализацией
1
grrrrr
45 / 45 / 13
Регистрация: 21.04.2009
Сообщений: 265
12.08.2009, 17:09  [ТС] #17
Спасибо!
0
From_Tula
40 / 40 / 10
Регистрация: 22.05.2009
Сообщений: 485
12.08.2009, 17:20 #18
может уже и не в тему сказанно...
А не проще просто прогнать по этому числу поиск начиная с 0 и заканчивая 9.
Например число 1211. Сперва проверяет на 0. Потом пошла 1. На 1 он даст положительный ответ. И так до 9 пусть проверяет...
Вроде так проще будет...
0
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
12.08.2009, 17:43 #19
From_Tula, дело во временной сложности алгоритма. В наших вариантах он равен n, в твоем n^2. Почему? Потому что мы проходим число последовательно по разрядам, и увеличиваем элемент доп.массива, индекс которого соответствует нашему числу. В итоге мы просто пробегаемся по нашему массиву и ищем элемент массива который больше или равен 3, иначе - пишем что такого числа нет. Ты предлагаеш вариант с полным перебором, т.е. 10 раз пробегать одно число, более того, минимум 6 проходов основного цикла будут бесполезными
0
Monte-Cristo
2794 / 1380 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.08.2009, 17:49 #20
From_Tula, ну так и делается в моем коде и коде M128K145. Только число - это int, а не char. Поэтому ссылаться к элементам с помощью [] нельзя, и применятся арифметические комбинации операции получения остатка и деления.

Кроме того алгоритм обхода указанный вами, выполнятся будет дольше.
0
12.08.2009, 17:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2009, 17:49
Привет! Вот еще темы с решениями:

Проверить является ли число палиндромом, содержит ли одинаковые цифры, или все различные.
Помогите сделать код на С++ Дано натуральное число n (0 &lt; n &lt; 9990). а)...

Дано трицифровое число.Определить имеет ли число одинаковые первую и последнюю цифры
Дано трицифровое число. Определить что число имеет одинаковые первую и...

Дано натуральное число n (n <= 9999). Учитывая все четыре цифры числа, определить, правильно, что оно содержит: все разные цифры
Плиз срочно надо=) для Microsoft Visual Studio 2010 Запрещено размещать...

Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры
Задача на С++ (do..while) Нужно ввести целое число и определить, верно ли,...


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

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

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