|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.12.2009, 16:16 | #1 |
Пользователь
Регистрация: 28.10.2009
Сообщений: 34
|
Задача на С++. формирование выбора предметов
Задача на С++. Формирование набора предметов. В текстовом файле записаны названия некоторых предметов, а так же их веса и ценности. При заданном ограничении на суммарный вес предметов, сформировать набор, имеющий наибольшую совокупную ценность.
Например: задается: мишка_0,3кг_200р. молоко_0,1кг_20р. диван_12кг_5000р. стул_2кг_2000р. кресло_9кг_4000р. парта_7кг_1500р. монитор_20кг_25000р. холодильник_20кг_25000кг. телевизор_17кг_13000р. задается вес не более 50 кг, т. е. сформировать набор не более, чем на 50 кг. из предметов наибольшей ценности. результат должен быть таким: холодильник_20кг_25000р. монитор_4кг_15000р. телевизор_17кг_13000р. итог: 41кг_53000р. помогите, пожалуйста. очень нужна эта задача. |
17.12.2009, 00:23 | #2 |
Удален
Форумчанин
Регистрация: 02.12.2009
Сообщений: 309
|
решение
решение (Код исправлен):
Код:
вход: мишка_0,3кг_200р. молоко_0,1кг_20р. диван_12кг_5000р. стул_2кг_2000р. кресло_9кг_4000р. парта_7кг_1500р. монитор_20кг_25000р. холодильник_20кг_25000р. телевизор_17кг_13000р. выход: мишка_0,3кг_200р. молоко_0,1кг_20р. кресло_9кг_4000р. монитор_20кг_25000р. холодильник_20кг_25000р. итог: 49.4кг_54220р. ////////////////////////////////////////////////// В примерах которые вы привели, содержаться ошибки: 1) стоимость холодильника в кг, вместо р. 2) на входе монитор весит 20 кг, а на выходе почему-то 4. Следовательно, ваши примеры неправильны. Правильные примеры я привел выше. В моём решении, макс. вес вводится с клавиатуры. Максимальное количество товаров на входе - 50. Общий вес, указывающийся в конце выходного файла записывается с десятичной точкой, если число дробное. Если нужна запятая, то можете переделать.... Всё, что содержится во входном файле должно строго соответствовать формату: НАИМЕНОВАНИЕ_ВЕСкг_СТОИМОСТЬр. Регистр в наименовании значения не имеет, но "кг" и "р." должны быть в нижнем регистре. Разделитель целой и дробной части на входе - запятая. Максимальное количество цифр после запятой - 2 (как было обговорено). Последний раз редактировалось Alex_FF; 17.12.2009 в 12:17. |
17.12.2009, 08:18 | #3 |
Пользователь
Регистрация: 28.10.2009
Сообщений: 34
|
так в выходящем файле все правильно, только еще один вопрос: когда запускаю программу, окно появляется и сразу исчезает с ошибкой:
'pz.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll' AVRF: verifier.dll provider initialized for pz.exe with flags 0x40007 'pz.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC 90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21 022.8_x-ww_597c3456\msvcp90d.dll', Symbols loaded. 'pz.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC 90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21 022.8_x-ww_597c3456\msvcr90d.dll', Symbols loaded. The program '[200] pz.exe: Native' has exited with code 0 (0x0). и еще как я поняла вес там уже стоит как бы по умолчанию не более 50 кг., а мне нужно чтобы я сама его вводила. заранее спасибо |
17.12.2009, 09:08 | #4 | ||||
Удален
Форумчанин
Регистрация: 02.12.2009
Сообщений: 309
|
Цитата:
Цитата:
во входном файле у вас монитор 20 кг весит, а в выходном - 4 кг, и стоимость у монитора разная на входе и выходе. В этой задаче вес у предметов фиксированный, т. е. его менять нельзя (да и нет смысла). Так что, ваш пример неправильный! Вес вводится с клавиатуры (исправил). А насчет ошибки не знаю, у меня на RAD Studio 2009 все работает нормально, а вот в Visual Studio 2008 выдаёт ошибку при исполнении, хотя компилируется нормально. Это можно избежать запустив сам скомпилированный exe файл, а не нажимая F5, в Visual Studio. Так что, компилируйте вначале, а потом запускайте exe файл. Кстати, если во входном файле заменить вес монитора и его стоимость на ту, которая у вас на выходном указана, и ввести ограничение на вес в 41 кг., то выход будет таким: монитор_4кг_15000р. холодильник_20кг_25000р. телевизор_17кг_13000р. итог: 41кг_53000р. Так, что исправьте в вашем примере во входном файле ошибки: во-первых, стоимость телевизора всё-таки в рублях, а не килограммах, и, во-вторых, вес и стоимость монитора. Цитата:
Цитата:
Последний раз редактировалось Alex_FF; 17.12.2009 в 12:04. |
||||
17.12.2009, 14:13 | #5 |
Удален
Форумчанин
Регистрация: 02.12.2009
Сообщений: 309
|
это хорошо, что я на RAD Studio писал, а не на VS, а то пришлось бы искать ошибку, которой на самом деле нет...
|
17.12.2009, 14:24 | #6 | |
Пользователь
Регистрация: 28.10.2009
Сообщений: 34
|
Цитата:
да я и не спорила,да, увидела что сделала опечатку в примерах. а когда говорила, что в выходном файле все правильно, я просто имела ввиду, что все нормально. программа работает, только ввод хотела с клавы. вот и все Последний раз редактировалось Veina; 17.12.2009 в 14:56. |
|
17.12.2009, 20:44 | #7 |
Удален
Форумчанин
Регистрация: 02.12.2009
Сообщений: 309
|
ну я подумал, что вы утверждаете, что ваши примеры правильные
Так всё правильно решено, или что-то еще нужно переделать? |
18.12.2009, 16:00 | #8 |
Пользователь
Регистрация: 28.10.2009
Сообщений: 34
|
все правильно. работает, спасибо огромное. просто если я допустим захочу поставить максимальный вес не 50, а допустим 100, просто везде заменить 50 на 100?
|
18.12.2009, 17:40 | #9 | |
Удален
Форумчанин
Регистрация: 02.12.2009
Сообщений: 309
|
Цитата:
Чтобы вводить вес 100 кг нужно массив dp[5001][51] описать как dp[10001][51]. Больше ничего менять не надо. Массив wts[50] - массив весов, здесь 50 - это максимальное количество предметов, которое может быть во входном файле, аналогично для массива стоимостей cost[50] - здесь 50 - это кол-во предметов. Массив x[51] используется для определения, какой из предметов надо включать в выходной файл, а какой нет. 51 - это кол-во предметов + еще единица. Массив nm[50][100] представляет собой массив строк, считанных из входного файла, здесь 50 - это кол-во предметов, 100 - длина строки. Так что число 50 здесь к весу отношения никакого не имеет За вес отвечает массив dp, а точнее его первое измерение. Если будете его менять, не забывайте, что его измерения должны быть всегда на единицу больше, чем вес и кол-во предметов. К тому же просто увеличив dp[5001][51] до dp[10001][51] программа у вас работать не будет , так как будет переполнение стека. Нужно увеличить размер стека, но как это делается в Visual Studio я не знаю, ибо использую RAD Studio. Спросите, например, у препода, может он вам скажет... Последний раз редактировалось Alex_FF; 18.12.2009 в 21:39. |
|
23.12.2009, 00:39 | #10 |
Удален
Форумчанин
Регистрация: 02.12.2009
Сообщений: 309
|
вот решение, которое работает для любого веса.
количество предметов во входном файле задается константой Q. Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Оператор выбора | Largo | Помощь студентам | 11 | 28.03.2009 19:19 |
задача на формирование массива. паскаль | Ananim-Pbl6ak | Помощь студентам | 8 | 20.03.2009 03:57 |
Формирование остатков | RUBEY | Microsoft Office Excel | 2 | 24.01.2008 19:32 |
Оператор выбора... | Bill Gates | Общие вопросы Delphi | 3 | 22.01.2008 11:32 |