Консультация № 177047
04.03.2010, 04:49
0.00 руб.
0 2 1
Уважаемые эксперты: вводятся 4 числа если произведение первых трех равно четвертому оставить без изменения, а иначе найти такое разложение четвертого числа на три множителя чтобы они были максимально близки друг к другу. Например: 4, 3, 2, 24 а не 12, 2, 1, 24 или 2, 2, 2. 8 а не 1. 1. 8. 8 и чтобы располагались множители по убывающей.Требуется решить на Си без применения массивов. Перебором.Заранее благодарю.

Обсуждение

Неизвестный
06.03.2010, 20:51
общий
1) У Вас пример - располагаются по ВОЗРАСАЮЩЕЙ - Это просто Ваша невнимательность?
2) Среда, ОС, ....
3) Без массивов? А где предполагается хранить множители? Уточните, пожалуйста, что за странные требования (конечно, понимаю, что задание так написано, но ...)
Неизвестный
09.03.2010, 00:01
общий
это ответ
Здравствуйте, Анатолий11.
Полагаю, что примерно так:
Код:
int main ()
{
unsigned int a, b, c, d;
scanf ("%i", &a); //ввод данных
scanf ("%i", &b);
scanf ("%i", &c);
scanf ("%i", &d);
if (d==a*b*c) { //если выполнено начальное условие
printf ("d = a*b*c"); //выводим сообщение и заканчиваем программу
return 0;
}
int i, j, k;
bool f = true; //флаг отсутствия множителей
for (i = 1; i<=d/2; i++) { //первый множитель
if (d%i!=0) continue; //если не множитель - пропускаем
for (j=i; j<=d/2; j++) { //второй множитель, больший чем первый
if (d%j!=0) continue; //если не множитель - пропускаем
for (k=j; k<=d/2; k++) { //третий множитель, больший чем второй
if (d%k!=0) continue; //если не множитель, пропускаем
if (i*j*k==d) { //если получаем число
if (f) //если множителей ещё не было
{a = i; b = j; c = k; f = false;} //сохраняем текущие и выставляем флаг
else //иначе проверяем, какие множители между собой ближе
if (abs(a-b)>abs(i-j) || abs(b-c)>abs(j-k))
{a = i; b = j; c = k;} //если новые оказались ближе, сохраняем их
}
}
}
}
if (f) printf ("\nResult: %i*1*1=%i", d, d); //если множителей нет, то вариант 1*1*само_число
else printf ("\nResult1: %i*%i*%i=%i", c, b, a, d); //иначе выводим полученный результат
getch (); //ожидание реакции пользователя
return 0;
}

Если что-то не понятно или не так, пишите в минифорум. Для работы надо подключить библиотеки conio.h и stdlib.h.
Удачи!
Форма ответа