Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/24: Рейтинг темы: голосов - 24, средняя оценка - 4.67
Rftg
0 / 0 / 0
Регистрация: 16.07.2015
Сообщений: 8
1

Все возможные комбинации из 10 цифр по n

16.07.2015, 13:26. Просмотров 4767. Ответов 19
Метки нет (Все метки)

есть 10 цифр, нужно написать программу, где вводишь n-кол-во чисел в последовательности, а потом программа перебирает все возможные комбинации цифр с 10 по n
допустим если n=4, то вывод должен быть таким
4737
0427
4339
...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2015, 13:26
Ответы с готовыми решениями:

Все возможные комбинации из 4 цифр
Доброго времени суток! Прошу помочь с такой задачей: Пользователь вводит...

Все возможные комбинации 5 чисел
В общем задача такая: Нужно, чтобы программа выдавала все возможные комбнации...

Все возможные комбинации длины k из 0 и 1
Как бы это реализовать? Подкиньте идей или может есть готовая у кого-то. Ввод...

Найти все возможные комбинации четырех букв
Есть задача с 4 буквами.A,B,C,D нужно найти все возможные комбинации этих букв....

Найти все возможные комбинации по номеру карты
Все привет!!! Выручайте с этим кодом уже вожусь почти неделю и не могу с ним...

19
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
16.07.2015, 13:40 2
C++
1
комбинации цифр с 10 по n
1) Нету промежутка с 10 по 4, есть с 4 по 10
Цитата Сообщение от Rftg Посмотреть сообщение
0427
2) в промежутке 4..10 нету цифры "2"
Цитата Сообщение от Rftg Посмотреть сообщение
цифр с 10 по n
3) 10 это не цифра, а число


0
Rftg
0 / 0 / 0
Регистрация: 16.07.2015
Сообщений: 8
16.07.2015, 14:00  [ТС] 3
у нас есть последовательность ЦИФР 0123456789 и есть n-длина второй последовательности, которую нужно получить(последовательность).
т.е. из этих 10 цифр программа выбирает все возможные варианты комбинаций чтоб длина каждой была n.
(если n=4 то таких комбинаций 5040)
p.s. если непонятно вверху написал то извиняюсь
0
ture
529 / 337 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
16.07.2015, 14:45 4
Лучший ответ Сообщение было отмечено Rftg как решение

Решение

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
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
 
 
const char M[] = "0123456789";
const int  L   = sizeof(M)-1;
 
void nextChar(char *, int, int);
 
int main(){
    setlocale(LC_ALL, "rus");
    cout << "Укажите длину строки - ";
    int n;
    cin >> n;
 
    char * pt = new char[n + 1];
    for(int i = 0; i <= n; i++)
        pt[i] = 0;
    
    nextChar(pt, 0, n);
 
    system("pause");
    return 0;
}
 
void nextChar(char * pt, int k, int n){
 
    for(int i = 0; i < L; i++){
        pt[k] = M[i];
        if(k + 1 < n)
            nextChar(pt, k + 1, n); 
        else
            cout << pt << endl;                     
    }
}
1
S_el
2220 / 1682 / 354
Регистрация: 15.12.2013
Сообщений: 6,665
16.07.2015, 15:36 5
Цитата Сообщение от Rftg Посмотреть сообщение
(если n=4 то таких комбинаций 5040)
Какое ограничение на n?
0
ture
529 / 337 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
16.07.2015, 15:41 6
Повторы убрал. Без классов, конечно спагетти начинает напоминать.
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
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
 
 
char M[] = "0123456789";
int  L   = sizeof(M)-1, cnt=0;
 
 
void nextChar(char *, int, int);
 
int main(){
    setlocale(LC_ALL, "rus");
    cout << "Укажите длину строки - ";
    int n;
    cin >> n;
 
    char * pt = new char[n + 1];
    for(int i = 0; i <= n; i++)
        pt[i] = 0;
    
    cnt = 0;
    nextChar(pt, 0, n);
    cout << "Всего комбинаций - " << cnt << endl;
    delete[] pt;
 
    system("pause");
    return 0;
}
 
void nextChar(char * pt, int k, int n){
 
    for(int i = 0; i < L; i++)
        if(M[i]!=0){
            pt[k] = M[i];
            M[i] = 0;
            if(k + 1 < n)
                nextChar(pt, k + 1, n); 
            else{
                cout << pt << endl;
                cnt++;
            }
            M[i] = pt[k];
        }
}
0
andreysv
17 / 17 / 6
Регистрация: 02.07.2011
Сообщений: 67
16.07.2015, 16:16 7
Составлял небольшую программу (не на c++) для получения таких перестановок: https://pastebin.osuosl.org/29406/
Вы можете запустить её так:
Bash
1
gen_seq.py -1 1234567890 4 10
Не ту программу выложил

Добавлено через 19 минут
---
Эту хотел: https://pastebin.osuosl.org/29411/
Строка запуска:
Код
brute.py 1234567890 4 10
1
kanod
0 / 0 / 0
Регистрация: 16.07.2015
Сообщений: 6
16.07.2015, 16:22 8
всего возможных перестановок если не ошибаюсь == 3628800
Есть еще програмка с использованием ИИ для точных значений..
интересантов много.!
0
Rftg
0 / 0 / 0
Регистрация: 16.07.2015
Сообщений: 8
16.07.2015, 16:34  [ТС] 9
целые числа, ну логично, что n не может быть <0

Добавлено через 59 секунд
для моей цели повторы нужны)
0
kanod
0 / 0 / 0
Регистрация: 16.07.2015
Сообщений: 6
16.07.2015, 16:37 10
НУЛЬ это и есть число ДЕСЯТЬ
0
Rftg
0 / 0 / 0
Регистрация: 16.07.2015
Сообщений: 8
16.07.2015, 16:39  [ТС] 11
а можно еще сделать чтоб эти числа сохранялись в, допустим, блокнот?
0
kanod
0 / 0 / 0
Регистрация: 16.07.2015
Сообщений: 6
16.07.2015, 16:41 12
ДА. только каким образом? там будет КУЧА кифир_ОК
П.С.
табе прога зачем? зачёт здаёшь?
0
Rftg
0 / 0 / 0
Регистрация: 16.07.2015
Сообщений: 8
16.07.2015, 16:49  [ТС] 13
да, мне нужна куча циферок в блокноте) а как, вот спрашиваю
Нет, не зачёт. Личное пользование(не ломать пин-коды) если интересно, напишу
0
andreysv
17 / 17 / 6
Регистрация: 02.07.2011
Сообщений: 67
16.07.2015, 17:02 14
Цитата Сообщение от Rftg Посмотреть сообщение
а можно еще сделать чтоб эти числа сохранялись в, допустим, блокнот?
Код
brute.py 0123456789 4 10 > C:\numbers.txt
0
kanod
0 / 0 / 0
Регистрация: 16.07.2015
Сообщений: 6
16.07.2015, 17:20 15
Цитата Сообщение от kanod Посмотреть сообщение
всего возможных перестановок если не ошибаюсь == 3628800
у тебя будет "ООО"чень тяжёлый файл "для личного пользования"!
если все перестановки по 10 чисел, как max. То это уже не 1Мега_buy_т.
Займись лучше математикой!
0
Rftg
0 / 0 / 0
Регистрация: 16.07.2015
Сообщений: 8
16.07.2015, 17:41  [ТС] 16
7 макс мне нужно)
0
Tsin
721 / 466 / 183
Регистрация: 30.12.2012
Сообщений: 1,265
Записей в блоге: 2
Завершенные тесты: 3
16.07.2015, 18:02 17
Цитата Сообщение от Rftg Посмотреть сообщение
(если n=4 то таких комбинаций 5040)
Подскажите по какой формуле считали.
0
Rftg
0 / 0 / 0
Регистрация: 16.07.2015
Сообщений: 8
16.07.2015, 18:03  [ТС] 18
А=10!/((10-4)!)=10*9*8*7
0
Tsin
16.07.2015, 18:13
  #19

Не по теме:

Rftg, тогда я похоже не уловил суть задания. По описанию и приведенным примерам кажется, что для n = 4 есть 10^4 вариантов, то бишь последовательность длины 4, где каждый элемент может принимать значения из 0..9. Объясните мне еще раз

0
S_el
2220 / 1682 / 354
Регистрация: 15.12.2013
Сообщений: 6,665
16.07.2015, 19:22 20
Лучший ответ Сообщение было отмечено Taatshi как решение

Решение

Tsin, вы правы,ТС по ошибочной формуле считал.Интересно какие результаты выдают программы,выложенные выше.

Добавлено через 27 минут
Как раз недавно была похожая тема на форуме,по-быстрому изменил:
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
# include <iostream>
# include <vector>
# include <algorithm>
# include <iterator>
# include <functional>
# include <cmath>
 
void print(const size_t &N,const size_t &M);
 
int main()
    {
    print(2,10);
    return 0;
    }
 
void print(const size_t &N,const size_t &M)
    {
    std::function<void(size_t,std::vector<size_t>)> Var=
        [&](size_t ind,std::vector<size_t> vec)
        {
        if(ind==0)
            {
            std::copy(vec.begin(),vec.end(),std::ostream_iterator<size_t>(std::cout,""));
            std::cout<<std::endl;
            return;
            }
        else
            {
            std::vector<size_t> newvec(vec);
            newvec.resize(vec.size()+1);
            for(size_t j=0;j<M;j++)
                {
                newvec[N-ind]=j;
                Var(ind-1,newvec);
                }
            }
        };
    Var(N,std::vector<size_t>());
    }
1
16.07.2015, 19:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2015, 19:22

Нужно вывести все возможные возрастающие 6-ти значные комбинации
Задачка: Нужно вывести все возможные возрастающие 6-ти значные комбинации из...

Вывести все возможные комбинации цепочек в матрице смежности
Есть матрица смежности вида: AB0 BCD DD0 CKN NE0 KB0 Т.е. если в конце...

Перебрать все возможные комбинации трех чисел от нуля до двух
Здравствуйте, помогите, пожалуйста, разобраться с темой (лучше всего написать...


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

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

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