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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
#1

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

12.08.2009, 13:30. Просмотров 2452. Ответов 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;
                        }
               }
      }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2009, 13:30     Определить, содержит ли 4-х значное число 3 одинаковые цифры.
Посмотрите здесь:

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

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

Верно ли, что число содержит ровно три одинаковые цифры? - C++
Верно ли, что это число содержит ровно три одинаковые цифры, как, например, числа 6676, 4544, 0006 и т.д.? Помогите. Я знаю как вызвать...

Определить, входят ли в 4-х значное число цифры 2 или 7. Не работает ветка else - C++
Добрый вечер. Условие: Дано четырехзначное число. Определить входят ли в него цифры 2 или 7. #include&lt;iostream&gt; #include &lt;locale&gt; ...

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

Дано трицифровое число.Определить имеет ли число одинаковые первую и последнюю цифры - C++
Дано трицифровое число. Определить что число имеет одинаковые первую и последнюю цифры (131, 272 и т.д.) Без циклов.Нужно сделать...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
12.08.2009, 13:40     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #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')++; не рассчитано на что-то другое.
Rififi
2338 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
12.08.2009, 13:42     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #3
Определить, содержит ли 4-х значное число 3 одинаковые цифры.
подряд, или вообще?
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
12.08.2009, 13:44     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #4
C++
1
if((arr[0]==arr[1] && arr[1]==arr[2]) || (arr[1]==arr[2] && arr[2]==arr[3]))
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
12.08.2009, 13:45     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #5
А почему ты сравниваешь именно первые 3 числа?
например, у тебя было введено число 12322, ты сортируешь по возрастанию, в итоге
получается 12223... Как видно, число содержит 3 одинаковых числа, но функция выдаст отрицательный ответ...

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

Добавлено через 2 минуты 57 секунд
FunDuck, сработало спасибо! но почему мой вариант не подошел? ведь по логике должно работать!
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.08.2009, 13:49     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #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;
}
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
12.08.2009, 13:50  [ТС]     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #8
Haster, речь идет о 4-х значном числе. Но можно улучшить! Надо подумать только! Пока додумался до этого!
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
12.08.2009, 13:51     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #9
Не совсем. Смотри: arr[0]==arr[1]==arr[2] вот что было у тебя... т.е. ты сначала срвниваешь arr[0]==arr[1]... результатом этого может быль либо 0 либо 1, т.е. либо они равны либо нет. Получается что ты сравниваешь arr[2] с нолем или единицей. Если расписать твой условие, то получится чтото вроде такого : (arr[0] == arr[1] && (1 или 0) == arr[2])
TAVulator
3945 / 1103 / 70
Регистрация: 27.07.2009
Сообщений: 3,443
12.08.2009, 13:59     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #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.
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
12.08.2009, 14:03     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #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 секунды
Граф меня опередил
Rififi
2338 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
12.08.2009, 14:11     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #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 секунды
поправочка: вышеприведенное до моего тогдашнего поста... (:
Monte-Cristo
12.08.2009, 14:12
  #13

Не по теме:

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

grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
12.08.2009, 17:04  [ТС]     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #14
M128K145, а что значит запись в 8 сточке

C++
1
int i(0);
инициализация?
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.08.2009, 17:06     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #15
Цитата Сообщение от grrrrr Посмотреть сообщение
инициализация?
да. это аналогично
C++
1
int i = 0;
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
12.08.2009, 17:06     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #16
да, старый вид обьявления переменной с инициализацией
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
12.08.2009, 17:09  [ТС]     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #17
Спасибо!
From_Tula
40 / 40 / 2
Регистрация: 22.05.2009
Сообщений: 481
12.08.2009, 17:20     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #18
может уже и не в тему сказанно...
А не проще просто прогнать по этому числу поиск начиная с 0 и заканчивая 9.
Например число 1211. Сперва проверяет на 0. Потом пошла 1. На 1 он даст положительный ответ. И так до 9 пусть проверяет...
Вроде так проще будет...
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
12.08.2009, 17:43     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #19
From_Tula, дело во временной сложности алгоритма. В наших вариантах он равен n, в твоем n^2. Почему? Потому что мы проходим число последовательно по разрядам, и увеличиваем элемент доп.массива, индекс которого соответствует нашему числу. В итоге мы просто пробегаемся по нашему массиву и ищем элемент массива который больше или равен 3, иначе - пишем что такого числа нет. Ты предлагаеш вариант с полным перебором, т.е. 10 раз пробегать одно число, более того, минимум 6 проходов основного цикла будут бесполезными
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2009, 17:49     Определить, содержит ли 4-х значное число 3 одинаковые цифры.
Еще ссылки по теме:

Варианты как разложить 5-значное число на цифры - C++
Здравствуйте! Помогите решить задачу. С помощью % и /, разложить 5-значное число на цифры и записать в обратном порядке (предыдущее...

Ввести натуральное число и определить, верно ли, что в его записи есть две одинаковые цифры (не обязательно ст - C++
Ввести натуральное число и определить, верно ли, что в его записи есть две одинаковые цифры (не обязательно стоящие рядом) Пример: ...

Дано n-значное число longint. Вывести цифры младшего и старшего разряда - C++
Написать программу. Дано n-значное число longint. Провести с ним действия согласно номеру варианта ( 17 ). Вывести только цифры самого...

Дано n-значное число longint. Заменить нулями все четные цифры в нём - C++
Дано n-значное число longint. Заменить нулями все четные цифры в нём и составить программу на С++.

Дано четырёх значное число. Определить: а)Входят ли в него цифры 2 или 7. б) входят ли в него 3,6 или 9 - C++
Дано четырёх значное число. Определить: а)Входят ли в него цифры 2 или 7. б)Входят ли в него 3,6 или 9 Сделать эту программу с...


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

Или воспользуйтесь поиском по форуму:
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.08.2009, 17:49     Определить, содержит ли 4-х значное число 3 одинаковые цифры. #20
From_Tula, ну так и делается в моем коде и коде M128K145. Только число - это int, а не char. Поэтому ссылаться к элементам с помощью [] нельзя, и применятся арифметические комбинации операции получения остатка и деления.

Кроме того алгоритм обхода указанный вами, выполнятся будет дольше.
Yandex
Объявления
12.08.2009, 17:49     Определить, содержит ли 4-х значное число 3 одинаковые цифры.
Ответ Создать тему
Опции темы

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