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

Перебор возможных вариантов разреза трубы - C++

Восстановить пароль Регистрация
 
nedsi
2 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 65
19.09.2013, 10:52     Перебор возможных вариантов разреза трубы #1
Доброго времени суток! Есть задача:"Вводится длина трубы, количество заготовок (1 .. 5), которые можно вырезать из трубы, и длина каждой заготовки. Вывести все возможные варианты разреза трубы " Пример: 100 2 60 30
Ответ : "60" "30" "60 +30" "30 +30" "30 +30 +30".
Написал код:
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
// prog3.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int dt,kil,dz[5],min = 3000000,max = 0;
    
    cout<<"dovzhuna trybu = "; cin>>dt;
    cout<<endl<<"kilkist zagotovok = "; cin>>kil;
    cout<<endl<<"vvedit dovzhuny zagotovok : "<<endl;
    for (int i =0; i<kil;i++)
    {
        cout<<endl<<"dovzhuna zagotovku "<<i+1<<" = "; cin>>dz[i];
        if (max<dz[i]) max = dz[i];
        if (min>dz[i]) min = dz[i];
    }
    cout<<"max = "<<max;
    cout<<"min = "<<min;
    cout<<endl<<"************result************";
 
    for (int i = 0; i<kil; i++)
        if (dz[i]<dt) cout<<dz[i]<<"";
    for (int i = min; i<max; i=i+min)
        for (int j = min; j<max; j=j+min)
        {
            //пробовал через 2 цикла, не получается 
        }
    system("pause"); 
    return 0;
}
Никак не могу придумать как организовать цикл, прошу помощи.
P.S. ПРОШУ ВАС, НЕ ПИСАТЬ ПОЛНЫЕ ПРОГРАММЫ. И вам меньше работы и мне приятно.Благодарю.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
19.09.2013, 15:00     Перебор возможных вариантов разреза трубы #2
Для того чтобы организовать цикл, нужно понимать, что Вы хотите сделать.
Опишите алгоритм действий, по которому Вы пишите программу.
Лично мне не совсем понятно, какой нужен результат.
Напишите правильные ответы для ввода:
100 2 10 10
100 2 10 15
100 2 70 50
100 4 30 30 30 30
100 4 30 30 30 10
100 3 40 20 5
Юрий Владимиров
 Аватар для Юрий Владимиров
51 / 51 / 2
Регистрация: 06.04.2013
Сообщений: 178
19.09.2013, 15:11     Перебор возможных вариантов разреза трубы #3
Cynacyn вроде так:
1. 10+10
2. 10+10, 10+15, 15+15
3. 50+50
4. нет вариантов
6. 40+40+20, 40+40+5, 20+20+40, 20+20+20, 5+5+5 и т д (вот тут нужно поправка автора...)
и т д

сейчас подумаю как это все сделать
nedsi
2 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 65
19.09.2013, 18:26  [ТС]     Перебор возможных вариантов разреза трубы #4
Цитата Сообщение от Cynacyn Посмотреть сообщение
Для того чтобы организовать цикл, нужно понимать, что Вы хотите сделать.
Опишите алгоритм действий, по которому Вы пишите программу.
Лично мне не совсем понятно, какой нужен результат.
Напишите правильные ответы для ввода:
100 2 10 10
100 2 10 15
100 2 70 50
100 4 30 30 30 30
100 4 30 30 30 10
100 3 40 20 5
Вы взяли очень неудобные цифры, не видно где какая заготовка. Возмем следующий пример:
100 2 80 10
ответ:
10, 80, 80+10, 80+10+10, 10+10, 10+10+10, 10+10+10+10, 10+10+10+10+10, 10+10+10+10+10+10, 10+10+10+10+10+10+10, 10+10+10+10+10+10+10+10, 10+10+10+10+10+10+10+10+10, 10+10+10+10+10+10+10+10+10+10,
D3fend0r
17 / 17 / 1
Регистрация: 14.09.2013
Сообщений: 37
19.09.2013, 20:02     Перебор возможных вариантов разреза трубы #5
Цитата Сообщение от nedsi Посмотреть сообщение
Никак не могу придумать как организовать цикл, прошу помощи.
P.S. ПРОШУ ВАС, НЕ ПИСАТЬ ПОЛНЫЕ ПРОГРАММЫ. И вам меньше работы и мне приятно.Благодарю.
Может лучше через рекурсию сделать. Рекурсивная функция получает 2 аргурмента : остаток трубы и размер заготовки (возможно еще нужно будет передать массив с возможными размерами заготовки,в этом случае вызываем рек. функцию из цикла). Рекурсия останавливается когда остаток трубы меньше , чем нужная заготовка.
Юрий Владимиров
 Аватар для Юрий Владимиров
51 / 51 / 2
Регистрация: 06.04.2013
Сообщений: 178
19.09.2013, 20:24     Перебор возможных вариантов разреза трубы #6
нихера не понял, у тебя же условые -- на выходе должно быть 2 два -- колво заготовок!

у тебя ответ на метровую трубу и ОДНУ заготовку. это одна заготовка в 10 а потом в 80!!



ответ -- сначала сортируем массив начальных требований размеров, потом берем формулу перестановок, и переставляем по очереди все размеры от первого до последнего что бы они (сумма их) помещалась в заданный размер
Mk_Man
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 26
24.01.2015, 00:03     Перебор возможных вариантов разреза трубы #7
Интересует вот эта тема.
можете объяснить как перебрать все комбинации и наконец-то написать код
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2015, 10:12     Перебор возможных вариантов разреза трубы
Еще ссылки по теме:

Перебор вариантов комбинации слов в строке C++
Организовать перебор всех возможных сочетаний C++
C++ Вывести все возможные варианты разреза трубы

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

Или воспользуйтесь поиском по форуму:
1XPLoade1
 Аватар для 1XPLoade1
30 / 30 / 17
Регистрация: 23.01.2015
Сообщений: 174
26.01.2015, 10:12     Перебор возможных вариантов разреза трубы #8
C++
1
2
3
4
5
for (int i = 0; i < N; i++)
         for (int j = i+1; j < N; j++)
         {
               printf("%d %d\n",A[i], A[j]);
         }
Yandex
Объявления
26.01.2015, 10:12     Перебор возможных вариантов разреза трубы
Ответ Создать тему
Опции темы

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