0 / 0 / 0
Регистрация: 01.11.2020
Сообщений: 2
|
|
1 | |
C++01.11.2020, 15:45. Показов 393. Ответов 0
Метки нет (Все метки)
Помогите объединить 3 кода в один
#include <iostream> #include <vector> #include <stdio.h> using namespace std; void swap(int* a, int i, int j) { int s = a[i]; a[i] = a[j]; a[j] = s; } bool NextSet(int* a, int n, int m) { int j; do // повторяем пока не будет найдено следующее размещение { j = n - 1; while (j != -1 && a[j] >= a[j + 1]) j--; if (j == -1) return false; // больше размещений нет int k = n - 1; while (a[j] >= a[k]) k--; swap(a, j, k); int l = j + 1, r = n - 1; // сортируем оставшуюся часть последовательности while (l < r) swap(a, l++, r--); } while (j > m - 1); return true; } void Print(int* a, int n) // вывод размещения { static int num = 1; // номер размещения cout.width(3); // ширина поля вывода номера размещения cout « num++ « ": "; for (int i = 0; i < n; i++) cout « a[i] « " "; cout « endl; } int main() { int n, m, * a; cout « "N = "; cin » n; cout « "M = "; cin » m; a = new int[n]; for (int i = 0; i < n; i++) a[i] = i + 1; Print(a, m); while (NextSet(a, n, m)) Print(a, m); cin.get(); cin.get(); return 0; } using namespace std; bool increase(vector<int> & vec, const int n) { for (int i = vec.size() - 1; i >= 0; i--) if (vec[i] + 1 <= n) { if (i != vec.size() - 1 && vec[i + 1] == vec[i] + 1) continue; ++vec[i]; for (int j = i + 1; j < vec.size(); j++) vec[j] = vec[j - 1] + 1; return true; } return false; } void print(const vector<int> & vec) { for (size_t i = 0; i != vec.size(); i++) cout « vec[i] « " "; cout « endl; } int main() { setlocale(LC_CTYPE, ""); // сочетания из n по k без повторений int n = 10; int k = 8; vector<int> vec(k); for (size_t i = 0; i != k; i++) vec[i] = i + 1; print(vec); while (increase(vec, n)) print(vec); return 0; } typedef unsigned long long ull; ull was_here[100][100]; ull rec(ull n, ull k) { if (n == k) was_here[n][k] = 1; else if (k == 1) was_here[n][k] = n; else was_here[n][k] = rec(n - 1, k - 1) + rec(n - 1, k); return was_here[n][k]; } int main() { ull n, k; scanf_s("%llu%llu", &n, &k); printf("%llu", rec(n, k)); return 0; } Добавлено через 4 минуты Это формулы комбинаторике, основные переменные N и K
0
|
01.11.2020, 15:45 | |