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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
XemyL
1 / 1 / 0
Регистрация: 23.03.2011
Сообщений: 14
#1

Разложение на слагаемые - C++

16.09.2011, 10:19. Просмотров 2162. Ответов 5
Метки нет (Все метки)

На входе у нас число (нат, пол) которое нужно разложить и ожидаймое количество слагаймых
алгоритм решения таков..выделяем место для одномерного массива, заполняем его 1-ми
увеличиваем последний елемент, пока сумма всех елементов не достигнет значения числа, которое мы разлогаем..выводим, уменшаем последний елемент на 1, при етом увеличивае предпоследний на 1 и т.д., но что бы выполнялись условия - следующий елемент (слагаймое) был не менше предущего и не больше остатка от разницы между суммой и предущим елементом. вывод тогда, когда остаток равный 0.
Нужно сделать программу БЕЗ рекурсии, но что то не доходит до меня как правильно наложить условия, в данном виде прога определяет только два слагаймые, при большем количестве идет зацыкливантие, помогите плс)


Не по теме:


Ето то, что смог делать на паскале, но и сишный вариант подойдет

Pascal
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
program RSlag;
uses crt;
var
   q: word;
   n: word;
   p, i: word;
   arr: array[1..1000] of word;
 
function Summ: boolean;
var
   i, sum: word;
begin
   sum := 0;
   for i := 1 to q do
   begin
      sum := sum + arr[i];
   end;
   if sum = n then Summ := true
   else Summ := false;
end;
 
procedure Printf;
var
   i: word;
begin
   for i := 1 to q do
      write(arr[i], ' ');
   writeln;
   readln;
end;
 
begin
   writeln('n: ');
   readln(n);
   writeln('q: ');
   readln(q);
   for i := 1 to q do
      arr[i] := 1;
   
   i:=1;
    if Summ <> true then
      repeat
         inc(arr[q])
      until Summ = true;
   printf;
   p := q;
   while Summ = true do
    begin
     if p <= i then 
      begin
      dec(p);
      inc(i);
      end;
     
      while (arr[p] >= arr[p - 1]) and (arr[p] <= (n - arr[p - 1])) do
       begin
        Printf;
        dec(arr[p]);
        inc(arr[p - i]);  
       end;
      if (arr[p] = arr[p - 1]) and (arr[p] = (n - arr[p - 1])) then
       begin
       dec(p);
       inc(i);
       end;
 
    end;
 
end.

Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2011, 10:19     Разложение на слагаемые
Посмотрите здесь:

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

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

разложение на все возможные слагаемые - C++
требуется разложить число, вводимое с клавиатуры и не большее 45, на слагаемые от 1 до 9 Добавлено через 6 минут (разными вариантами...

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

Разложение натурального положительного числа на слагаемые? - C++
Помогите... Нужно разложить число на слагаемые... Причем, условия такие: слагаемые должны быть в диапазоне от 1 до 10 (соответственно...

Разбиение на слагаемые - C++
Задание:нужно вывести на экран в лексикографическом порядке все разбиения на слагаемые числа n от 1 до 20. пример: n=5 5=1+1+1+1+1 ...

различные слагаемые - C++
По данному числу 1≤n≤10^9 найдите максимальное число k, для которого n можно представить как сумму k различных натуральных слагаемых....

Число разбиений на слагаемые C++ - C++
Подскажите, есть такая задача. По данному целому числу 1≤n≤1000 найдите число способов представить n в виде суммы положительных целых...

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

Суммировать слагаемые при фиксированном параметре x - C++
Пожалуйста помогите!!!!!!!!!!!!!!!!!! Я здесь пытался что-то сделать но увы((((( черновая работа, если нечего неправильно сделайте...

Разложить заданное число на слагаемые, которые не будут повторяться - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; int main() { int f=0; do{ int one =...

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zalogic
146 / 142 / 2
Регистрация: 12.12.2010
Сообщений: 269
16.09.2011, 10:52     Разложение на слагаемые #2
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
#include <iostream>
using namespace std;
  int q,n,p,i;
  int arr[1000];
 
 
bool Summ()
{
   int sum;
   sum = 0;
   for (int i= 1; i<q; i++)  sum = sum + arr[i];
   if (sum==n) return true;
   else return false;
}
 
 
void Printf(){
   int ir;
   for (int i= 1; i<q; i++) cout<<arr[i]<<" ";
   cout<<"\n";
   cin>>ir;
}
 
int main(){
   cout<<"n: "<<"\n";
   cin>>n;
   cout<<"q: "<<"\n";
   cin>>q;
   for (i= 1; i<q; i++) arr[i] = 1;
   i=1;
    if (Summ()!= true) 
      do{
         arr[q]++;
         }
      while (Summ() == true);
   Printf();
   p = q;
   while (Summ()== true){
     if (p <= i) {p--;i++;}        
      while ((arr[p] >= arr[p - 1]) && (arr[p] <= (n - arr[p - 1]))) {
        Printf();
        arr[p]--;
        arr[p - i]++;  
       }
      if ((arr[p] == arr[p - 1]) && (arr[p] == (n - arr[p - 1]))){p--;i++;}
    }
 return 0;
}
как-то так наверно...
XemyL
1 / 1 / 0
Регистрация: 23.03.2011
Сообщений: 14
16.09.2011, 21:26  [ТС]     Разложение на слагаемые #3
как я понял ето то что я написал только на с++, но мой код видь не работает, поетому я спросил как сделать
rostykm
2 / 2 / 0
Регистрация: 30.03.2011
Сообщений: 34
16.09.2011, 21:31     Разложение на слагаемые #4
Цитата Сообщение от XemyL Посмотреть сообщение
как я понял ето то что я написал только на с++, но мой код видь не работает, поетому я спросил как сделать
ничего не понял
XemyL
1 / 1 / 0
Регистрация: 23.03.2011
Сообщений: 14
16.09.2011, 23:47  [ТС]     Разложение на слагаемые #5
мой пример переписан на языке с++, которые не рабочий, мне же нужно рабочий
alkagolik
Заблокирован
17.09.2011, 05:45     Разложение на слагаемые #6
Цитата Сообщение от XemyL Посмотреть сообщение
мой пример переписан на языке с++, которые не рабочий, мне же нужно рабочий
нет, это жуткий суржик паскаля и си
в сях конструкция "begin end" заменяется скобками "{}", конструкция "if условие then" пишется просто так "if (условие)", оператор "=" по умолчанию оператор присваивания, для сравнения используется оператор "==" да, блин, тут писать и писать. твой пример никакого отношения к си или с++ не имеет. смотри пост №2
Yandex
Объявления
17.09.2011, 05:45     Разложение на слагаемые
Ответ Создать тему
Опции темы

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