Смутно о том, как делать эту программу

66
2

Вопрос заключается в следующем. Клиенту требуется определенное количество бумаги. Обвинения на бумаге:

    .10 для одиночных листов. .055 за лист в кратных 100. .04 на лист в кратных 500. .03 на лист в кратных 1000.

Я знаю, что вы должны где-то использовать модульное разделение. Я не уверен, правильно ли настроены мои переменные, и мой мозг вот-вот расплавится. Грустно ли? ха-ха. Я был бы очень признателен за помощь в этом. Приветствия :)

Option Explicit On

Imports system

Module paperp
Sub Main()

Dim papercost As Double
Dim onetpackage As Integer
Dim fivehpackages As Integer
Dim onehpackages As Integer
Dim singlesheets As Integer

Console.Writeline("Number of 1000 packages:")
onetpackage = convert.toint32(Console.Readline())

Console.Writeline("Number of 500 packages:")
fivehpackages = convert.toint32(Console.Readline())

Console.Writeline("Number of 100 packages:")
onehpackages = convert.toint32(Console.Readline())

Console.Writeline("Number of single sheets:")
singlesheets = convert.toint32(console.Readline())

Console.Out.Writeline("Number of 1000 packages:")
Console.Out.Writeline(onetpackage)
Console.Out.Writeline("Number of 500 packages:")
Console.Out.Writeline(fivehpackages)
Console.Out.Writeline("Number of 100 packages:")
Console.Out.Writeline(onehpackages)
Console.Out.Writeline("Number of single sheets:")
Console.Out.Writeline(singlesheets)
Console.Out.Writeline("Your total Cost is:")
Console.Out.Writeline(papercost)

End Sub
End Module

спросил(а) 2012-09-24T02:22:00+04:00 7 лет, 9 месяцев назад
1
Решение
55

С этим кодом вам просто нужно добавить цену за пакет:

papercost = _
0.03 * 1000.0 * onetpackage + _
0.04 * 500 * fivehpackages + _
0.055 * 100 * onehpackages + _
0.1 * singlesheets

Однако, чтобы сделать назначение понятным, я думаю, что вы действительно должны просто ввести общее количество листов, а затем рассчитать количество пакетов. Вы можете использовать modulo для вычисления оставшихся листов после вычисления количества пакетов, но это так же просто, как использование выражения:

  onetpackage = Math.Floor(totalsheets / 1000)
totalsheets -= onetpackage * 1000

ответил(а) 2012-09-24T02:34:00+04:00 7 лет, 9 месяцев назад
54

Почему бы не перебирать каждую сумму (например, 1000, 500, 100, 1), а при отсутствии листов, заданных пользователем в переменной, логика будет выглядеть так:

Предопределенные vars: no_of_sheets (пользовательский ввод), working_amount = no_of_sheets, current_index = 0, count = 0, amount (array) = (1000, 500, 100, 1), затраты = (0,03, 0,04, 0,055, 0,1), всего = (0, 0, 0, 0)

While (working_amount > 0)
if current_index < 4
if (working_amount - amounts[current_index]) >= 0
total[current_index]++
working_amount = working_amount - amounts[current_index]
else
current_index++
endif
endif
endwhile

Теперь у вас есть массив с суммами каждого блока, например массив (1, 2, 3, 4) означает 1 x 1000 листов, 2 x 500, 3 x 100, 4 x 1

Тогда вы можете просто умножить каждый бит по их цене.

Надеюсь, это поможет.

ответил(а) 2012-09-24T02:33:00+04:00 7 лет, 9 месяцев назад
39

Ваш вопрос о назначении является примером проблемы Рюкпак, но, к счастью, очень простой вариант.

Вам необязательно использовать оператор modulo - вы можете сделать это итеративно. Начните с самого дорогого продукта (который обеспечивает наилучшее соотношение цены за штуку), а затем "купите" столько, сколько сможете, со стартовыми деньгами (продолжайте вычитать из денег, пока вы не сможете это себе позволить), затем перейдите на к следующему продукту и повторить, пока вы ничего не сможете себе позволить.

ответил(а) 2012-09-24T02:33:00+04:00 7 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема