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

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

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

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

26.03.2014, 13:32. Просмотров 643. Ответов 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();
}
Подсткажите пожалуйста, можно ли эту программу как-то упростить или написать иначе?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2014, 13:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Cколько раз встречаются числа с 4 одинаковыми цифрами (C++):

Вывести числа, которые встречаются в массиве несколько раз / один раз - C++
дан массив состоящий из 100 целых чисел. а)Вывести все числа,которие встречаются в етом массиве несколько раз б)Вывести все...

Вывести все числа, которые встречаются в этом массиве несколько раз - C++
Дан массив, состоящий из 100 целых чисел. а) Вывести все числа, которые встречаются в этом массиве несколько раз. б) Вывести все...

Определить, имеются ли в заданном массиве одинаковые числа и сколько раз они встречаются; удалить дубли - C++
2. Дан одномерный массив, заполненный случайными числами. Найти, есть ли одинаковые числа и сколько раз встречаются. уплотнить массив,...

Найти количество четырехзначных чисел с тремя одинаковыми цифрами - C++
Найти количество четырехзначные числа, у которых есть три одинаковых цифры.

Из заданной символьной строки выбрать те символы, которые встречаются в ней только один раз, в том порядке, в котором они встречаются в тексте - C++
Из заданной символьной строки выбрать те символы, которые встречаются в ней только один раз, в том порядке, в котором они встречаются в...

Найти наименьшее число с одинаковыми десятичными цифрами, кратное натуральному числу К - C++
Как начинающий программист, я довольно долго мучился с кодом для этой программы, но в итоге что-то пошло не по плану. Вот, собственно,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
K0nstantine
0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 5
06.09.2014, 18:22 #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;
}
0
_Ivana
3149 / 1777 / 152
Регистрация: 01.03.2013
Сообщений: 4,981
Записей в блоге: 2
06.09.2014, 20:19 #3
Судя по диапазонам счетчика цикла, незначащие нули отбрасываются в обоих вариантах, однако ответы получаются разные
0
Renji
1921 / 1319 / 298
Регистрация: 05.06.2014
Сообщений: 3,781
06.09.2014, 20:22 #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;
}
Дополнить учебником комбинаторики для объяснения преподавателю "как эта хреновина работает".
2
K0nstantine
0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 5
08.09.2014, 14:27 #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;
}
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
08.09.2014, 16:12 #6
Цитата Сообщение от Renji Посмотреть сообщение
как эта хреновина работает
А можно хотя бы немного расжевать? Очень интересно.
0
Renji
1921 / 1319 / 298
Регистрация: 05.06.2014
Сообщений: 3,781
08.09.2014, 21:30 #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.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2014, 21:30
Привет! Вот еще темы с ответами:

Сжать массив, удалив из него все последующие элементы с одинаковыми старшими цифрами - C++
Как допилить программу? #include &lt;iostream&gt; using namespace std; void Mass(int* a, int n) { for (int i = 0; i &lt;...

Из заданной символьной строки выбрать те символы ,которык встречаются в ней только один раз,в том порядке, в котором они встречаются в тексте и в том - C++
Из заданной символьной строки выбрать те символы ,которык встречаются в ней только один раз,в том порядке, в котором они встречаются в...

Определить все ли числа натурального числа N, представленного в 9ричной системе счислений являются одинаковыми - C++
Определить все ли числа натурального числа N, представленного в девятиричной системе счислений являются одинаковыми.

Шифрование DES: на выходе получаются каждый раз новые результаты с одинаковыми входными данными - C++
Здравствуйте. Попробовал сегодня реализовать хоть как-то шифрование DES. Накодил кучу корявого кода. В итоге на выходе получаются каждый...


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

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

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