2013-07-24 4 views
-2

Мне нужна была помощь с проблемой, которую я назначил в классе. Это наше введение в for loops. Вот проблема:MATLAB: разделение элементов с использованием цикла for

Рассмотрите следующую загадку.

Это все, что я до сих пор:

function pile = IslandBananas(numpeople, numbears) 
for pilesize=1:10000000 


end 

Я действительно ценю ваш вклад. Спасибо!

+0

Почему вы хотите удалить большую часть вашего вопроса? Просто продемонстрируйте еще больше усилий, и сообщество SO определенно будет готово помочь! – voxeloctree

+0

Удаление цели упражнения и оставление только бессмысленного фрагмента кода на самом деле не является улучшением этого вопроса. – tmpearce

ответ

2

Я позабочусь, но вам нужно попробовать больше, чем это. А также вам нужен только один цикл. Во-первых, подумайте о том, как вы построили бы этот алгоритм. Ну, вы знаете, что вам нужно использовать цикл for, чтобы начать. Итак, давайте подумаем о том, что происходит в этой проблеме.

1) У вас есть куча.

2) Первая ночь кто-то берет кучу и делит ее на 3 и находит, что один остался, это означает mod(pile,3) = 1.

3) Но он отбрасывает дополнительный банан. Это означает (pile-1).

4) Он занимает треть, оставив две трети влево. Это означает (2/3)*(pile-1).

5) Утром они берут кучу и делят ее на 3 и снова находят, что один остался, поэтому это означает mod((2/3)*(pile-1),3) = 1.

6) Но они отбрасывают дополнительный банан. Это означает (2/3)*(pile-1)-1.

7) Наконец, у каждого из них есть по крайней мере один банан, если он должен быть самой маленькой кучей. Таким образом, самая маленькая куча должна быть такой, чтобы (1/3)*((2/3)*(pile-1)-1) = 1.

Я по существу дал вам ответ, остальное вы можете написать формулой (1/3)*((2/3)*(pile-1)-1) и простой оператор if для проверки наименьшего возможного целого числа, которое равно 1. Это можно сделать в четырех строках внутри цикла for.

Теперь, расширяя это на любое количество людей и любое количество медведей, требуется две простые замены в этой формуле! Если ваш учитель требует этого, это можно легко разделить на два вложенных цикла.

+0

Не совсем. Прежде всего, ваши задания запутывают. Как и этот код MATLAB даже не запускается. Вы можете разбить код на шаги, если хотите, что может быть полезно для вас, чтобы понять процесс, но на самом деле все, что вам нужно сделать, это сказать в вашем цикле for: endpile = formulaIgaveyou, а затем сразу после этого проверьте, что 'endpile' является целым числом, если вы включаете оператор break, как только это будет выполнено, вы закончите. – voxeloctree

+1

Зная, как использовать, если и для циклов, это не MATLAB, а основные принципы программирования. Вам нужно пересмотреть эти концепции и серьезно попробовать. Если вы этого не сделаете, я не могу вам помочь. Я уже ответил на весь ответ. Вам нужно подумать об этой проблеме и закодировать ее для себя, ясно, что вам нужна практика. Что касается ссылок, они легко доступны в Интернете. Пожалуйста, приложите серьезные усилия в свою работу. – voxeloctree

Смежные вопросы