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

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

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

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

12.08.2009, 13:30. Просмотров 2487. Ответов 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 одинаковые цифры. (C++):

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

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

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

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

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

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

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

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

Добавлено через 2 минуты 57 секунд
FunDuck, сработало спасибо! но почему мой вариант не подошел? ведь по логике должно работать!
Monte-Cristo
2788 / 1374 / 30
Регистрация: 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;
}
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
12.08.2009, 13:50  [ТС] #8
Haster, речь идет о 4-х значном числе. Но можно улучшить! Надо подумать только! Пока додумался до этого!
FunDuck
688 / 379 / 4
Регистрация: 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])
TAVulator
3945 / 1103 / 70
Регистрация: 27.07.2009
Сообщений: 3,443
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.
M128K145
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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 секунды
Граф меня опередил
Rififi
2359 / 1054 / 44
Регистрация: 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 секунды
поправочка: вышеприведенное до моего тогдашнего поста... (:
Monte-Cristo
12.08.2009, 14:12
  #13

Не по теме:

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

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

C++
1
int i(0);
инициализация?
Monte-Cristo
2788 / 1374 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.08.2009, 17:06 #15
Цитата Сообщение от grrrrr Посмотреть сообщение
инициализация?
да. это аналогично
C++
1
int i = 0;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2009, 17:06
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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