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

Разложение натурального положительного числа на слагаемые? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ допустил ошибку, в перезагрузке операций http://www.cyberforum.ru/cpp-beginners/thread578807.html
На первыйвзгляд код чистый и ошибок быть не должно, вот код: #include <iostream> #include <iomanip> #include <windows.h> #include <math.h> using namespace std; char bufRus;
C++ Ошибка записи Помогите найти ошибку записи во 2 файл... уже запарился искать #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <unistd.h> #include <iostream> #include <stdio.h> http://www.cyberforum.ru/cpp-beginners/thread578790.html
Рудиментарный класс String C++
Этот код из учебника Либерти, проверялся уже не единожды, из-за этого не могу закончить тему массивов... Помогите разобраться, пожалуйста, в чем здесь ошибка: //Использование класса String #include <iostream> #include <conio.h> #include <string.h> using namespace std; //Рудиментарный класс String
Сумма и произведение элементов массива C++
Пожалуйста, помогите, написать программу: В одномерном массиве, состоящем из n вещественных элементов, вычислить: • сумму положительных элементов массива; • произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами. Упорядочить элементы массива по убыванию.
C++ Найти максимальный элемент http://www.cyberforum.ru/cpp-beginners/thread578764.html
В матрице размером m*n найти максимальный элемент каждой строки. Результат получить в виде вектора размером n.
C++ Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент. #include "stdafx.h" #include <iostream.h> #include <windows.h> char bufRus; char* Rus(const char* text) { CharToOem(text, bufRus); подробнее

Показать сообщение отдельно
Skotinyshaka
4 / 4 / 0
Регистрация: 08.11.2011
Сообщений: 99

Разложение натурального положительного числа на слагаемые? - C++

18.05.2012, 16:41. Просмотров 1782. Ответов 2
Метки (Все метки)

Помогите... Нужно разложить число на слагаемые... Причем, условия такие: слагаемые должны быть в диапазоне от 1 до 10 (соответственно разлагаемое число не больше 55), слагаемые не должны повторяться, и начинать желательно с больших слагаемых, но при этом чтобы все-таки сохранялась разбросанность(рандомность)!
Вот я сам чего-то наваял, но код глючный и не всегда работает так как хотелось бы! Ищу другие идеи хотя бы!!!
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include "stdafx.h"
#include <iostream>
#include <ctime>
 
using namespace std;
 
int SaveArray[15];
 
void PartitionOF( int buf );
int gen_random( int range_min, int range_max );
int PartitionArray( int number, int i ); //Для нахождения числа в массиве
void OutputArray( int u );
int amount(int buf, int i);
void DeleteOne(int i); //Удаляет последнее число из массива
void addNumber( int i );
void SortArray( int i );
 
int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Vvedite chislo dlya razlojeniya: ";
    int number; cin >> number;
    PartitionOF(number );
 
    return 0;
}
 
void PartitionOF( int buf )
{
    srand(time(NULL) );
    int gener;
    int i = 0;
    int k = 1; //Для учета суммы
    cout << "\nMi tyta! )" << endl;
 
    if( buf <= 10 ){
        gener = 1; 
    }else if( (buf > 10) & (buf <= 19) ){
        gener = gen_random( 2, 4 ); //Генерируем максимальное число слагаемых
    }else if( (buf > 19) & (buf <= 34) ){
        gener = gen_random( 4, 7 ); //Генерируем максимальное число слагаемых
    }else if( (buf > 34) & (buf <= 45) ){
        gener = gen_random( 7, 8 ); //Генерируем максимальное число слагаемых
    }else if( buf > 45 ){
        gener = gen_random( 8, 9 ); //Генерируем максимальное число слагаемых
    }else if( buf == 55 ){
        gener = 10;
    }else{ cout << "FUCK!!!" << endl; exit(1);}
 
    cout << "Maximual`noe chislo slagaemix :"<< gener << endl;
 
    while( (k != 0) & (gener != i) ) //До тех пор пока сумма не будет равна введенному числу
    {
        addNumber( i );
        i++;
 
        if( PartitionArray( SaveArray[i-1], i ) == 0){ //проверяем есть ли число в массиве
            DeleteOne( i );
            i = i - 1;
        }
        
        if( amount( buf, i ) == 2 ){
            cout << "Ydalyaem poslednee chislo!" << endl;
            DeleteOne( i );
            i = i - 1;
        }
        k = amount( buf, i );
        cout << "\n GENRE = " << gener <<"    i = " << i << endl;
        if( (k != 0) & (gener == i) )
        {
            cout<<"Tut: !!!!"<<endl;
            k = 1;
            i = i + 1;
            while( i != 0 ){
                DeleteOne( i );
                i--;
            }
            OutputArray( i );
        }
    }
    
    OutputArray( i );
    SortArray( i );
    OutputArray( i );
}
 
int gen_random( int range_min, int range_max ) {
 if ( range_min > range_max ) {
    cout << "Vi vveli nevernii diapazon!" << endl;
    int temp = range_max;
    range_max = range_min;
    range_min = temp;
} 
return range_min+rand()%( range_max - range_min+1 );    
}
 
void OutputArray(int u)
{
    int sum = 0;
    for(int j = 0; j < u; j++)
    {
        cout << "Znachenie [" << j << "]:" << SaveArray[j] << endl;
        sum = sum + SaveArray[j];
    }
    cout << "Symma:  " << sum << endl;
}
 
int PartitionArray( int number, int i )
    //Возвращает 1 если число уже есть в массиве
{
    int l = 0;
    for( int j = 0; j <= i; j++){
        
        if( SaveArray[j] == number ) l++;
    }
    if ( l == 1 ) return 1;
    else return 0;
}
 
int amount(int buf, int i)
{
    int sum = 0;
    for(int j = 0; j < i; j++){
        sum = sum + SaveArray[j];
    }
    cout << "Sum = " << sum << endl;
    if( sum == buf ){ return 0; }
    if( sum > buf ){ return 2; }
    return 1;
}
 
void DeleteOne(int i)
{
    for(int j = 0; j < i; j++){
        SaveArray[j];
        if(j == i - 1 ){
            SaveArray[j] = 0;
        }
    }
}
 
void addNumber( int i )
{
    SaveArray[i] = gen_random( 1, 10 );
    cout <<"Generiryemoe SaveArray[" << i <<"] = " <<SaveArray[i]<<endl;
}
 
void SortArray(int i)
{
    int temp;
    for( int j = 1; j <= i; j++){
        for( int n = 1; n <= i-j; n++){
            if( SaveArray[n] > SaveArray[n+1] )
            {
                temp = SaveArray[n];
                SaveArray[n]=SaveArray[n+1];
                SaveArray[n+1]=temp;
            }
        }
    }
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru