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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Skotinyshaka
4 / 4 / 0
Регистрация: 08.11.2011
Сообщений: 99
18.05.2012, 16:41     Разложение натурального положительного числа на слагаемые? #1
Помогите... Нужно разложить число на слагаемые... Причем, условия такие: слагаемые должны быть в диапазоне от 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;
            }
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2012, 16:41     Разложение натурального положительного числа на слагаемые?
Посмотрите здесь:

Разложение Натурального числа C++
C++ Разложение натурального числа
C++ Разложение натурального числа
Разложение числа на слагаемые C++
C++ Разложение на слагаемые
C++ разложение на все возможные слагаемые
C++ Разложение натурального числа на два простых
C++ Нахождение наименьшего нечетного натурального делителя k (k≠1) любого заданного натурального числа n

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Skotinyshaka
4 / 4 / 0
Регистрация: 08.11.2011
Сообщений: 99
19.05.2012, 19:59  [ТС]     Разложение натурального положительного числа на слагаемые? #2
ауууу) кто-нибудь)))???
HappyAndRu
13 / 13 / 2
Регистрация: 19.05.2012
Сообщений: 44
19.05.2012, 22:49     Разложение натурального положительного числа на слагаемые? #3
Вот тема где это обсуждается:
Разложение числа на слагаемые
Yandex
Объявления
19.05.2012, 22:49     Разложение натурального положительного числа на слагаемые?
Ответ Создать тему
Опции темы

Текущее время: 18:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru