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

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

12.08.2009, 13:30. Просмотров 3745. Ответов 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;
                        }
               }
      }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2009, 13:30
Ответы с готовыми решениями:

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

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

Дано натуральное n-значное число P. Верно ли что число содержит три одинаковые цифры.
Люди помогите - нужно програмку написать с помощью процедур и функций - собственно вот: Дано...

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

21
554 / 508 / 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
MCSD: APP BUILDER
8787 / 1065 / 104
Регистрация: 17.06.2006
Сообщений: 12,604
12.08.2009, 13:42 3
Определить, содержит ли 4-х значное число 3 одинаковые цифры.
подряд, или вообще?
0
692 / 383 / 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
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
12.08.2009, 13:45 5
А почему ты сравниваешь именно первые 3 числа?
например, у тебя было введено число 12322, ты сортируешь по возрастанию, в итоге
получается 12223... Как видно, число содержит 3 одинаковых числа, но функция выдаст отрицательный ответ...

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

Добавлено через 2 минуты 57 секунд
FunDuck, сработало спасибо! но почему мой вариант не подошел? ведь по логике должно работать!
0
2806 / 1396 / 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
47 / 47 / 13
Регистрация: 21.04.2009
Сообщений: 265
12.08.2009, 13:50  [ТС] 8
Haster, речь идет о 4-х значном числе. Но можно улучшить! Надо подумать только! Пока додумался до этого!
0
692 / 383 / 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
Эксперт по компьютерным сетямЭксперт Pascal/Delphi
4124 / 1232 / 221
Регистрация: 27.07.2009
Сообщений: 3,883
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
Эксперт JavaЭксперт С++
8358 / 3579 / 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
MCSD: APP BUILDER
8787 / 1065 / 104
Регистрация: 17.06.2006
Сообщений: 12,604
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 Посмотреть сообщение
Граф меня опередил
главное что не поленился, и решил разобраться сам :good:

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

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

Кроме того алгоритм обхода указанный вами, выполнятся будет дольше.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2009, 17:49

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Определить, содержит ли число две одинаковые цифры
1) Даны действительные числа x, y. Определить, принадлежит ли точка (x,y) кольцу с внутренним и...

Ввести 4-х значное число,если вторая и четвертая цифры одинаковые,то должно вывести да
Всем привет,не подскажете как реализовать решение, с консоли вводим 4-х значное число,если вторая и...

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

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


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

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

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