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

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

Войти
Регистрация
Восстановить пароль
 
Yuzalf
0 / 0 / 0
Регистрация: 26.03.2014
Сообщений: 3
#1

Cколько раз встречаются числа с 4 одинаковыми цифрами - C++

26.03.2014, 13:32. Просмотров 638. Ответов 6
Метки нет (Все метки)

Здравствуйте.Мне нужна помощь.

Для всех шестизначных натуральных чисел посчитать сколько раз встречаются числа, в записи которых присутсвует 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
#include <math.h>
using namespace std;
void main (void)
{
    int count=0;
    for (int i=100000;i<=999999;i++) 
    {
              setlocale(LC_CTYPE,"rus");
        int a,b,c,d,e,f;
        a=i%10;
        b=(i/10)%10;
        c=(i/100)%10;
        d=(i/1000)%10;
        e=(i/10000)%10;
        f=(i/100000)%10;
        if ((a==b)&(a==c)&(a==d)) 
            {
            count++;
            continue;
            }
        else 
        {
            if ((a==b)&(a==c)&(a==e))
                {
                count++;
                continue;
                }
            else 
            {
                if ((a==b)&(a==c)&(a==f))
                {
                count++;
                continue;
                }
                else 
                {   
                    if ((a==b)&(a==d)&(a==e))
                    {
                    count++;
                    continue;
                    }
                    else 
                    {
                        if ((a==b)&(a==d)&(a==f))
                        {
                        count++;
                        continue;
                        }
                        else 
                        {
                            if ((a==b)&(a==e)&(a==f))
                            {
                            count++;
                            continue;
                            }
                            else 
                            {
                                if ((a==c)&(a==d)&(a==e)) 
                                {
                                count++;
                                continue;
                                }
                                else
                                {
                                    if ((a==c)&(a==d)&(a==f))
                                    {
                                    count++;
                                    continue;
                                    }
                                    else 
                                    {
                                        if ((a==c)&(a==e)&(a==f))
                                        {
                                        count++;
                                        continue;
                                        }
                                        else
                                        {
                                            if ((a==d)&(a==e)&(a==f))
                                            {
                                            count++;
                                            continue;
                                            }
                                            else 
                                            { 
                                                if ((b==c)&(b==d)&(b==e))
                                                {
                                                count++;
                                                continue;
                                                }
                                                else
                                                {
                                                    if ((b==c)&(b==d)&(b==f))
                                                    {
                                                    count++;
                                                    continue;
                                                    }
                                                    else 
                                                    {
                                                        if ((b==c)&(b==e)&(b==f))
                                                        {
                                                        count++;
                                                        continue;
                                                        }
                                                        else 
                                                        {
                                                            if ((b==d)&(b==e)&(b==f))
                                                            {
                                                            count++;
                                                            continue;
                                                            }
                                                            else 
                                                            {
                                                                if ((c==d)&(c==e)&(c==f))
                                                                {
                                                                count++;
                                                                continue;
                                                                }
                                                                else count=count;
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    cout<<"Ответ: "<<count;
    cin.get();
}
Подсткажите пожалуйста, можно ли эту программу как-то упростить или написать иначе?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2014, 13:32     Cколько раз встречаются числа с 4 одинаковыми цифрами
Посмотрите здесь:
C++ Вывести все числа, которые встречаются в этом массиве несколько раз
C++ Определить, имеются ли в заданном массиве одинаковые числа и сколько раз они встречаются; удалить дубли
Найти количество четырехзначных чисел с тремя одинаковыми цифрами C++
Из заданной символьной строки выбрать те символы, которые встречаются в ней только один раз, в том порядке, в котором они встречаются в тексте C++
C++ Найти наименьшее число с одинаковыми десятичными цифрами, кратное натуральному числу К
Из заданной символьной строки выбрать те символы ,которык встречаются в ней только один раз,в том порядке, в котором они встречаются в тексте и в том C++
C++ Определить все ли числа натурального числа N, представленного в 9ричной системе счислений являются одинаковыми
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
K0nstantine
0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 5
06.09.2014, 18:22     Cколько раз встречаются числа с 4 одинаковыми цифрами #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
27
28
#include <stdio.h>
#include <iostream>
using namespace std;
 
int main()
{
    int k = 0;
    for (int i = 100000; i < 1000000; i++)
    {
        int m[10];
        for (int j = 0; j < 10; j++)
            m[j] = 0;
        int t = i;
        while (t>0)
        {
            m[t % 10]++;
            t /= 10;
        }
        for (int j = 0; j < 10; j++)
            if (m[j] == 4)//Колличество одинаковых цифр.
            {
                k++;
                break;
            }
                
    }
    cout << k;
}
_Ivana
3041 / 1728 / 150
Регистрация: 01.03.2013
Сообщений: 4,906
Записей в блоге: 2
06.09.2014, 20:19     Cколько раз встречаются числа с 4 одинаковыми цифрами #3
Судя по диапазонам счетчика цикла, незначащие нули отбрасываются в обоих вариантах, однако ответы получаются разные
Renji
1875 / 1273 / 290
Регистрация: 05.06.2014
Сообщений: 3,630
06.09.2014, 20:22     Cколько раз встречаются числа с 4 одинаковыми цифрами #4
Подсткажите пожалуйста, можно ли эту программу как-то упростить или написать иначе?
Ну, если нигде не накосячил, то как-то так:
C++
1
2
3
4
5
6
7
8
9
int factorial(int n){return !n?1:n*factorial(n-1);}
int func(int n)
{
    return factorial(6)/(factorial(n)*factorial(6-n))*10*pow(9,6-n);
}
int main()
{
    cout<<(func(4)+func(5)+10)*9/10<<endl;
}
Дополнить учебником комбинаторики для объяснения преподавателю "как эта хреновина работает".
K0nstantine
0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 5
08.09.2014, 14:27     Cколько раз встречаются числа с 4 одинаковыми цифрами #5
При N>M/2 работает верно, иначе возможны ошибки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <iostream>
using namespace std;
 
#define M 6
#define N 4
__int64 f(int i)
{
    return (i ? i*f(i - 1) : 1);
}
int main()
{
    __int64 k = f(M) / f(N) / f(M-N);
    for (int i = 0; i < M - N + 1; i++)
        k *= 9;
    cout << k << endl;
}
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
08.09.2014, 16:12     Cколько раз встречаются числа с 4 одинаковыми цифрами #6
Цитата Сообщение от Renji Посмотреть сообщение
как эта хреновина работает
А можно хотя бы немного расжевать? Очень интересно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2014, 21:30     Cколько раз встречаются числа с 4 одинаковыми цифрами
Еще ссылки по теме:
Шифрование DES: на выходе получаются каждый раз новые результаты с одинаковыми входными данными C++
C++ Сколько раз встречаются гласные буквы?
C++ Заполнить массив случайными цифрами от 1 до 9, посчитать сколько раз в нем встречается
Числа, представимые разностью квадрата числа, образованного первыми двумя цифрами и квадратом 3-ей цифры C++
C++ Перевод числа из одной с.с. в другую, манипуляции с цифрами числа

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

Или воспользуйтесь поиском по форуму:
Renji
1875 / 1273 / 290
Регистрация: 05.06.2014
Сообщений: 3,630
08.09.2014, 21:30     Cколько раз встречаются числа с 4 одинаковыми цифрами #7
А можно хотя бы немного расжевать? Очень интересно.
Есть шестизначное число состоящее из шести разрядов a1, a2 ... a6. Нужно выбрать четыре разряда в которых будут стоять одинаковые цифры N. Первый разряд - любой из шести. Второй - любой из пяти оставшихся. И так далее. Всего - 6*5*4*3 вариантов выбора четырех разрядов из шести. Или 6!/(6-4)! (! - факториал).

Последовательность в которой были выбраны разряды никакой роли не играет ("единица будет первой и второй"="единица будет второй и первой"). Поэтому, число вариантов сокращается в 4! раза (число способов перетасовать четыре предмета/разряда) и становится равным 6!/((6-4)!*4!).

Ну и наконец, остались два незаполненных разряда. Их можно заполнить любыми цифрами кроме N (иначе цифр N будет не четыре, а пять). То есть, девять возможных цифр, 9*9 вариантов. Теперь, складываем вместе - десять вариантов N, 6!/((6-4)!*4!) вариантов распихать эти N по числу и 9*9 вариантов заполнить оставшиеся разряды. Итого - 6!/((6-4)!*4!)*10*9*9 вариантов. Аналогичные расчеты делаются для случая когда цифр N должно быть не четыре, а пять. Именно это и считает функция func.

Завершающий штрих - полученное число не должно начинаться с нуля. Значит, каждую десятую комбинацию нужно отбросить. И func(4)+func(5)+func(6) умножается на 9/10.
Yandex
Объявления
08.09.2014, 21:30     Cколько раз встречаются числа с 4 одинаковыми цифрами
Ответ Создать тему
Опции темы

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