PDA

Показать полную графическую версию : разделить число примерно поровну.


FreeDDos
23-05-2012, 08:59
Здравствуйте.
Сразу начну с примера. Есть число 80. его нужно разделить на заданное n частей. Числа должны быть кратны 10. Например число 80 разбить на 3 части. первая часть 30, вторая часть 30, третья часть 20. То есть примерно поровну.
Или то же число 80 разбить на 5 частей. 1-я 20, 2-я 20, 3-я 20, 4-я 10, 5-я 10.
Надеюсь смысл понятен.
И нужно реализовать на C++. Дано число которое нужно разбить, дано количество разбиений n, и записать эти все части в массив.
Заранее спасибо!

lxa85
23-05-2012, 09:06
Дано число C, частей n
ti = ]C/n[ с округлением до целых десятков
и так в каждой итерации цикла
Все остальное самостоятельно.

Tonny_Bennet
23-05-2012, 09:11
То есть примерно поровну. »

Не знаю где вы учитесь но 10 даже примерно не равно 20 :). Есть некоторые понятия округления и сравнения по порядку величины, но мне кажется, что здесь они просто не нужны.

Если разделить 80 на 3 то мы получим 26,66. Потом из полученного выделить часть, кратную 10. Мы получим 20. Затем мы просто умножим 20 на 3 и получим 60. И из 80 вычтем 60 и получим 10. И в принципе сработает ваше первое разбиение: 20,20,20,10.

Если пойти тем же путём и 80 разделить на 5 будет 16. Выделяем целую часть, получаем 10. Умножаем на 5 получаем 50. Из 80 вычитаем 50 получаем 30. И части строятся криво :(

10,10,10,10,10,30

Может стоит потом как то поработать с остатком. К примеру если он больше первых частей то нужно его как-то поделить и перебросить на первые слагаемые.

ti = ]C/n[ с округлением до целых десятков »
Если смотреть в мой пример то округление до целых десятков приведёт к неверному результату: 26.6 --> 30 , 26.6 --> 30, 26.6 --> 30, и уже мы перевалили за 80.

FreeDDos
23-05-2012, 09:19
Можно по подробней а то не могу разобраться.
Это нужно цикл сделать такой чтобы считал с округлением кратным 10?

lxa85
23-05-2012, 09:35
Если смотреть в мой пример то округление до целых десятков приведёт к неверному результату: 26.6 --> 30 , 26.6 --> 30, 26.6 --> 30, и уже мы перевалили за 80. »
и так в каждой итерации цикла »
Я прикинул вариант деления 80 на 7, поэтому в каждой итерации.
Можно по подробней а то не могу разобраться. »
Все уже разобрано, текст выше.
Будут наработки приходите. Вся суть алгоритма расписана. "Жевать" не имеет смысла.
Это нужно цикл сделать такой чтобы считал с округлением кратным 10? »
Да не, можно прям так, без циклов, без заморочек, к чему огород городить? :)
(думай своей головой, а не нашей)

FreeDDos
23-05-2012, 09:40
А что если такую систему:
80 на 3 части
80/3 = 26... ->30 //округлить до 10.
80-30 = 50
50/3 = 16... ->20
50-20 = 30 // Останавливаемся потому что разбили на три части и выходит что 30 20 30 части.

80 на 5 частей.
80/5 = 16... -> 20
80-20 = 60
60/5 = 12... -> 20
60-20 = 40
40/5 = 8... -> 10
40-10 = 30
30/5 = 5... -> 10
30-10 = 20 //Останавливаемся потому что разбили на пять частей и вышло 20 20 10 10 20

lxa85
23-05-2012, 09:45
80 на 3 части -> 30 20 30
80 / 5 -> 20 20 10 10 20
»
Сами то как думаете? Под условия решения подходит или нет?
Или для верность надо еще попробовать на 7 разделить?

FreeDDos
23-05-2012, 09:51
попробовал...
получается...
80/7 = 11... -> 20
80-20=60
60/7 = 8... -> 10
60-10=50
50/7= 7... ->10
50-10=40
40/7=5... -> 10
40-10=30
30/7= 4... -> 10
30-10 = 20
20/7= 2... ->10
20-10 = 10 // останавливаемся и получаем 20 10 10 10 10 10 10

lxa85
23-05-2012, 09:56
попробовал...
получается... »
тогда вперед и с песней. Отчет о сданной лабе приветствуется.




© OSzone.net 2001-2012