Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Программа разбиения целых чисел с использованием алгоритма Гинденбурга*/
- #include <iostream>
- using namespace std;
- void printResult(int*, int);
- int hindenburgAlgo(int*, int, int);
- int getSum(int*, int);
- bool greaterThenM(int*, int);
- int main()
- {
- int n, m = 0;
- cout << "Введите число n: ";
- cin >> n;
- if (n <= 0) {
- cout << "Введено неправильное число n" << endl;
- return -1;
- }
- cout << "Введите число m: ";
- cin >> m;
- if (m <= 0) {
- cout << "Введено неправильное число m" << endl;
- return -2;
- }
- // инициализировать массив со слагаемыми
- int set[m] = {0};
- set[m-1] = n;
- int *ptr = set;
- while( hindenburgAlgo(ptr, n, m) > 0) {
- if (greaterThenM(ptr, m)) {
- printResult(ptr, m);
- }
- // printResult(ptr, m);
- }
- return 0;
- }
- int hindenburgAlgo(int *array, int n, int m) {
- int *last = &array[m-1];
- if ((*last - *array) <= 2) {
- return -1;
- }
- for (int *ptr=&array[m-2]; ptr>=array; ptr--) {
- int *num = ptr;
- if ((*last - *num) >= 2) {
- for (int *ptr2 = num; ptr2<&array[m-1]; ptr2++) {
- *ptr2 = *num + 1;
- }
- *last = n - getSum(array, m);
- break;
- }
- }
- return 2;
- }
- void printResult(int *arr, int m) {
- int i;
- for (int *ptr=arr; ptr<&arr[m]; ptr++) {
- if (*ptr == 0)
- continue;
- if (ptr == &arr[m-1]) {
- cout << *ptr << endl;
- } else {
- cout << *ptr << " + ";
- }
- }
- cout << endl;
- }
- int getSum(int *arr, int m) {
- int sum = 0;
- for (int *ptr=arr; ptr<&arr[m-1]; ptr++) {
- sum += *ptr;
- }
- return sum;
- }
- bool greaterThenM(int *arr, int m) {
- bool a = false;
- int *last = &arr[m-1];
- int *prelast = &arr[m-2];
- // if (*prelast > *last) {
- // return false;
- // }
- for (int *ptr=arr; ptr<&arr[m]; ptr++) {
- if (*ptr >= m) {
- a = true;
- }
- }
- return a;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement