Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 26.05.2019, 15:38   #1
h4nn1
Новичок
 
Регистрация: 26.05.2019
Сообщений: 1
Репутация: 10
По умолчанию Подскажите по функции

есть массив f = [1], [2], [5], [10], [25] номиналы монеток
e= [15],[10],[10],[10],[2] их каждой количество
нужно написать функцию сдачи Change(b) b - остаток, должен выдаваться наименьшим кол-вом монет
например

Change(17) = [0],[1],[1],[1],[0]
Change(47) = [0],[1],[0],[2],[1]
Change(100)=[0],[0],[0],[5],[2]
h4nn1 вне форума   Ответить с цитированием
Старый 26.05.2019, 16:42   #2
OmegaBerkut
Спокойный псих
Профессионал
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Адрес: Украина
Сообщений: 1,210
Репутация: 347
По умолчанию

Я как то писал алгоритм выдачи банкнот, там стояла такая же задача ...
Реализацию у себя не нашёл, но вспомнил: порядок номиналов и их количества должны идти в порядке убывания номинала; в цикле начиная с первого номинала учитывая количество монет вычитать номинал до условия
"остаток на сдачу > номинала И количество номинала > 0 И сдача > 0".
Если условие не выполняется - переход на следующую итерацию.
Можно и в порядке возрастания, тогда цикл будет идти в обратном порядке.
Код:
function int[][] OddMoney(int odd)
{
	int[]
		f = [1], [2], [5], [10], [25], // не знаю такого синтаксиса, просто скопировал ваш код
		e= [15],[10],[10],[10],[2];
	int[][] result=new int[2][];
	result[0]=f; // номиналы
	result[1]=new int[e.Length]; // количество номиналов на сдачу
	int i;
	for (i=0;i<result[1].Length;i++)
		result[1][i]=0; // на C# значения по умолчанию нулевые, написал для наглядности
	for (i=f.Length-1;i>=0;)
		if (odd>f[i] && e[i]>0 && odd>0)
		{
			odd-=f[i];
			e[i]--;
			result[1][i]++; // увеличение количества
		} else
			i--;
	return result;
}
ВНИМАНИЕ: код сварганил на коленке, за его работоспособность не отвечаю.
__________________
Подпись ? Не, не слышал ...

Последний раз редактировалось Alex11223; 24.06.2019 в 17:34.
OmegaBerkut вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите плиз по функции get_the_author_meta black_mamba WordPress и другие CMS 3 26.10.2015 11:34
Функции. Подскажите... pobedin Общие вопросы C/C++ 6 30.10.2009 09:48
Указатели на функции(подскажите новичку) Malkovich Общие вопросы C/C++ 7 17.07.2009 13:35
Возврат значения функции по ссылке(подскажите новичку) Malkovich Общие вопросы C/C++ 11 14.07.2009 08:48
Подскажите как записать обратные тригонометрические функции на паскале....)))) Polo Паскаль 2 04.11.2008 12:05


04:12.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru