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

Задано n чисел. Найти все группы по k чисел. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ никак ни могу написать програму на С++ посмотрите пожалуйста как ее можно написать http://www.cyberforum.ru/cpp-beginners/thread593651.html
Проводятся несколько (не более 100) экспериментов, в ходе которых измеряется некоторый параметр, значения которого заносятся в двоичный файл в виде последовательности чисел, называемой экспериментальной серией. Все значения являются вещественными числами типа double. Структура файла имеет следующий вид: Количество экспериментов - целое типа long. Затем следует 100 заранее выделенных...
C++ Абстракция Мужики, объясните пожалуйста термин "Абстракция" в С++ на примере более понятно. а то в вики научно описано без примеров. http://www.cyberforum.ru/cpp-beginners/thread593649.html
C++ Перевод из Pascal в C++
Помогите перевести исходник из Pascal в C++. В Паскале я силен,а вот Си ток немного знаю, выручайте плз, в долгу не останусь! Исходник длинный, так как я писал Меню на Паскале) Uses crt, graph; label metka,metka1; const km=4;w=159;h=10;tca=10;tcp=15;bca=14;bcp=1;km1=6;PrD:real=1800;a=50; var c:char; k,i,i1,tc,bc:byte; xmn,ymn:array of integer; mas:array of pointtype; ...
C++ Почему не работают методы списка (односвязного), при вызове ф-ий? (Код прилагается)
Написал такой код, для односвязного списка. И когда начал компилировать, столкнулся с проблемой : не работают методы. Ошибка в том, что указатели на эл-ты не могут быть вычислены. Но я не понимаю почему. И как по хорошему исправить так, чтобы методы(ф-ии) работали? List.h #include <stdio.h> #include "point.h" #pragma once // 2-ой вариант сража включения, правда...
C++ BOrland c for dos Исправить ошибку! код есть! http://www.cyberforum.ru/cpp-beginners/thread593628.html
Прошу помощи!!!! Есть код.... Но проблема.....когда ввожу номер группы ( на разных студентов но один номер группы) то он выводит первого которого я ввел...а нужно чтобы выводил всех с заданной группой!!! Так же с фамилией .. код должен быть на Borland C for dos..... ПЛИЗ ИСПРАВТЕ ОШИБКУ!!! курсач надо завтра защищать...!!!! ПРОШУ!! ------------------------------------ #include <iostream.h>...
C++ Вместо вывода в stdout, сохранить числа в динамический массив Это алгоритм выборки элементов из двумерного массива. Нужно сохранить отобранные элементы в одномерный динамически создаваемый массив. void viewArray2DPath(int **pArr2D, const unsigned int cnRow, const unsigned int cnColumn) { unsigned int nRow = cnRow - 1; int nColumn = nRow - 1; bool bUp = true; while (true) { подробнее

Показать сообщение отдельно
qfisher
30 / 30 / 1
Регистрация: 24.05.2012
Сообщений: 156
04.06.2012, 03:05     Задано n чисел. Найти все группы по k чисел.
улучшил, корректная обработка если на вход подаешь 4 числа - 11(теперь на выходе повторяющиеся комбинации отсутствуют)
k = 2
sum = 22

буду признателен если найдете ошибки или оптимизируете .)

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
#include <iostream>
using namespace std;
 
void print_line()
{
    cout << endl << "*********************************" << endl << endl;
}
 
int main(int argc, char *argv[])
{
    int i,j,n,k,sum;
 
    // задаем количество элементов массива
    cout << "n=";
    cin >> n;
 
    int *input=new int[n];
 
    // вводим данные массива
    for (i=0; i<n; i++)
    {
        cout << "input[" << i << "]=";
        cin >> input[i];
    }
 
    // количество элементов в группе
    cout << "k=";
    cin >> k;
 
    // искомая сумма группы
    cout << "sum=";
    cin >> sum;
 
    // инициализация двумерного массива
    int *minmax = new int[n];
 
    //
    for (j = 0; j < n ; j++)
    {
        minmax[j] = j;
    }
 
    // определяем массив индексов по возрастанию входного массива
    bool is_changed;
    do
    {
        is_changed = false;
        for (i=1; i<n; i++)
        {
            if (input[minmax[i-1]] > input[minmax[i]])
            {
                // обмен
                int temp;
                temp = minmax[i];
                minmax[i] = minmax[i-1];
                minmax[i-1] = temp;
                is_changed = true;
            }
            else if(input[minmax[i]] == input[minmax[i-1]])
            {
                minmax[i] = minmax[i-1];
            }
        }
    }
    while (is_changed);
 
    //  инициализация набора
    int *nabor = new int[k];
 
    for (i=0; i < k; i++)
    {
        nabor[i] = i;
    }
 
    print_line();
    cout << "Элементы:" << endl;
 
    // далее нужно перебирать сочетания
    do
    {
        // находим сумму текущего набора
        int s=0;
        for (i=0; i<k; i++)
        {
            s += input[minmax[nabor[i]]];
        }
 
        // если сумма совпадает то вывод элементов текущей группы
        if (s == sum)
        {
            cout << endl;
 
            for (i=0; i<k; i++)
            {
                cout << input[minmax[nabor[i]]] << "\t";
            }
 
            cout << endl;
        }
 
        is_changed = false;
 
        // здесь формируется следующий набор
        for (j=k-1; j>=0; j--)
        {
            for (i=nabor[j]+1; i<n-k+j+1; i++)
            {
                if (minmax[nabor[j]] != minmax[i])
                {
                    nabor[j] = i;
                    is_changed = true;
 
                    for (int m = j+1; m < k; m++)
                    {
                        nabor[m] = nabor[m-1] + 1;
                    }
 
                    break;
                }
            }
 
            if (is_changed) break;
        }
    }
    while (is_changed);
 
    print_line();
 
    delete[] minmax;
    delete[] nabor;
    delete[] input;
 
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru