Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Skotinyshaka
4 / 4 / 0
Регистрация: 08.11.2011
Сообщений: 99
#1

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

18.05.2012, 16:41. Просмотров 1859. Ответов 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;
            }
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2012, 16:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разложение натурального положительного числа на слагаемые? (C++):

Разложение натурального числа на слагаемые - C++
Я не силен в математике, но математику надоело вести математические методы и он начал давать задачки по созданию программ, все бы ничего,...

Разложение числа на слагаемые - C++
Разложение числа на слагаемые - используется во многих задачах (как мне кажется - это тривиальная задача). И мне стало интересно: какой...

Разложение натурального числа - C++
Помогите,пожалуйста, написать программу задание:написать программу,реализующую жадный алгоритм(минимизация числа слагаемых) для...

Разложение натурального числа - C++
Есть такая задача: Составить программу, которая выдаёт представление натурального числа в виде суммы 5 слагаемых, где каждое слагаемое...

Разложение Натурального числа - C++
Привет.Помогите пожалуйста решить задачу. Разложить натуральное число на простые множители (вывести, например, 36=1*2*2*3*3 или 7 = 1*7)....

Разложение натурального числа на простые множители - C++
Выведите разложение натурального числа n &gt; 1 на простые множители. Простые множители должны быть упорядочены по возрастанию и разделены...

2
Skotinyshaka
4 / 4 / 0
Регистрация: 08.11.2011
Сообщений: 99
19.05.2012, 19:59  [ТС] #2
ауууу) кто-нибудь)))???
0
HappyAndRu
13 / 13 / 2
Регистрация: 19.05.2012
Сообщений: 46
19.05.2012, 22:49 #3
Вот тема где это обсуждается:
Разложение числа на слагаемые
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2012, 22:49
Привет! Вот еще темы с ответами:

Разложение натурального числа на два простых - C++
Помогите написать программу... нужно разложить натуральное число на два простых всеми возможными способами. вот мои наработки: ...

Разложение на простые множители заданного натурального числа - C++
Составить программу , печатающую разложение на простые мн0жители заданн0го натУральн0го числа n &gt; 0 (другими словами требуется печатать...

Разложение на слагаемые - C++
Подскажите идею для написания программы, желательно с рекурсией: Дано натуральное число n. Небходимо вывести все возможные варианты...

Разложение на слагаемые - C++
На входе у нас число (нат, пол) которое нужно разложить и ожидаймое количество слагаймых алгоритм решения таков..выделяем место для...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru