Премини към съдържанието

Препоръчан отговор


Здравейте, имам въпрос относно следната задача:дадени са определен брой еднолевки, двулевки и петолевки.Дадена е и една цена. Броевете и цената се въвеждат от клавиатурата.Искам да разбера дали има по-лесен начин за решаване на задачата: съществува ли комбинация от наличните пари така, че да може да платим сумата без да се налага да ни връщат. Въпросът ми е дали има по-бърз начин от 3 цикъла ( един в друг). Евентуално, ако има- може ли и да се изведе тази тройка ( пак по по- лесен начин ). Питам това, тъй като съм чувал, че ложело и без цикъл да стане ( поне първата задача) , ама ако е така нямам никаква идея как ще се реализира това. Благодаря предварително.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ами естествено, че може без цикъл. Не мога да си представя и откъде ти е дошла идеята за цикъл. Ти ако трябваше да връщаш пари, как щеше да постъпиш?По принцип , трябва да връщаш винаги големи банкноти, ако може за да имаш повече възможности после. за целта:делиш сумата на 5 (да видиш колко банкноти по 5 да върнеш)ако имаш толкова, отбелязваш си и намираш остатъка. Ако не, отбелязваш си всичките банкноти по 5 и пак намираш колко остава да върнеш.Ако има остатък, повтаряш процедурата и с двулевките върху останалите пари.Остатъка след двулевките, го плащаш с еднолевки. Ако нямаш достатъчно, задачата няма решение.

  • Харесва ми 3

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Е тогава например:Имаме 3 петолевки и 3 двулевки. Искаме да платим 16 лева. Така ще взема петолевките т.е. 15 лева и искам да платя още левче.Да, но това няма как да стане.Действително, обаче мога да платя с 2 петолевки и 3 двулевки, които имам в конкретния случай. Или може би не съм разбрал правилно предложения от вас метод? Сега ще ще се пробвам и аз да драсна нещо, дано да стане.

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Е тогава например:Имаме 3 петолевки и 3 двулевки. Искаме да платим 16 лева. Така ще взема петолевките т.е. 15 лева и искам да платя още левче.Да, но това няма как да стане.Действително, обаче мога да платя с 2 петолевки и 3 двулевки, които имам в конкретния случай. Или може би не съм разбрал правилно предложения от вас метод? Сега ще ще се пробвам и аз да драсна нещо, дано да стане.

Шах с пешката :)Еми, така е - бързата работа...Какво ще кажеш за следната корекция: Горното плюс, ако нямаш еднолевки, ползваш максималният възможен брой петолевки със същата четност, както сумата която искаме да постигнем. Това е много специфичен, направо нагласен метод, но и условието е много конкретно - обосновка: със сигурност имаме само 3 вида банкноти и само с двулевките може да стане "издънка" по метода който предложих по-рано, ако изобщо имаме решение.Нещо такова: 
void check_sum(int needed_sum, int ones, int twos, int fives){    int num_5, num_2;    num_5 = needed_sum / 5;    if (num_5 > fives)        num_5 = fives;    if (ones == 0)   	 num_5 -= ((needed_sum % 2) ^ (num_5 % 2));    needed_sum -= num_5 * 5;    num_2 = needed_sum / 2;    if(num_2 > twos)   	 num_2 = twos;    needed_sum -= num_2 * 2;    if (needed_sum > ones) {	    printf("No solution");        return;    } else {	    printf("Solution: fives: %d, twos: %d, ones: %dn", num_5, num_2, needed_sum);        return;    }}
Иначе, ако имаме повече видове банкноти (и/или монети), ще трябва цикъл или рекурсия вече. Редактирано от flare (преглед на промените)
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Благодаря ви много. Можете ли само да ми кажете какво е това значе " ^ " , че не го бях срещал до сега.


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Благодаря ви много. Можете ли само да ми кажете какво е това значе " ^ " , че не го бях срещал до сега.

http://www.cs.mun.ca/~michael/c/op.html

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.