Pull to refresh

Задача про бананы на чемпионате по программированию в Украине

Я вам покажу мое решение задачи на VII открытом чемпионате Харькова.
Задача G. Бананы(измененная для преподавания в школах)
Ограничение по времени: 1 секунда
Ограничение по памяти: 64 Мб

Недавно компания «ООО Шерхан & Табаки» выиграла тендер на поставку бананов в школы для одарённых бандерлогов. По условиям тендера и министерской программы «Равный доступ к качественному питанию», каждый бандерлог в школе должен получить одинаковое количество бананов. К сожалению, руководству компании неизвестно, какая из школ будет осчастливлена этим летом, поэтому было решено отгружать бананы коробками по K бананов в каждой, причём общее количество бананов должно быть минимальным.
После длительных расчётов, перерасчётов и совещаний выяснилось, что возможно один из ящиков будет отправлен в Джунгли неполным. Вот только вопрос о том, сколько бананов положить в этот ящик остался открытым…

Входные данные

В первой строке входного файла записано число N (1 ≤ 1000) – количество бананов, умещающихся в одной коробке. Во второй строке записаны два числа – количества бандерлогов в школах. Все числа во второй строке не превосходят 10 000.

Выходные данные

Следует вывести единственное число — количество бананов в последнем ящике.

Пример
Вх. данные| Вывод
10
4 6 | 2
______
12
4 6 | 12


Вычисляем по формуле: вычисляем наименьшее общее кратное(НОК) и потом от НОК отнимаем количество бананов.Если эти числа равны друг другу, то количество бананов в последнем ящике равно НОК.

#include using namespace std;
int nok(int a, int b);//Объявляем nok
int kbananov,n1,n2;//думаю тут понятно
int x;
int main () {
cout << "Please enter kbananov"<<endl;
cin >> kbananov>>n1>>n2;
if(kbananov>1000 || (!n1<10000) || (!n2>10000))//если число больше чем надо - выходим
{
exit(0);
}else
{
int x= nok(n1,n2);
x=(x==kbananov) ? kbananov : (x-kbananov) ;//Если х==колличеству бананов,значит х равен количеству бананов, иначе он равен х минус бананы
cout<<"Result= "<<x<<endl;//Выводим результат
return 0;
}
}

int nok(int x, int y)
{
int count=(x>y) ? x : y; //Вычисляем большее число,от которого будем отталкиваться в цикле
for (int i=count; ; i++)
{
if (!(i%x) && !(i%y))//если число i кратно сразу числам x и y,значит это есть наше НОК
{
return i;//Возвращаем НОК

}
}
}


p.s. Учитель не смог решить задачу на дельфи (1.5 часа), а я ее решил (за час).
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.