Я пытался решить проблема «Самая большая / самая маленькая коробка (10215)» на сайте UVA, и вот мой код:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;
double quadratic_solver(double a, double b, double c){
double sq, x1, x2, min;
sq = sqrt(b * b - 4 * a * c);
x1 = (-b + sq) / (2 * a);
x2 = (-b - sq) / (2 * a);
return (x2 > 0) ? x2 : x1;
}
int main(){
cout << setprecision(3) << fixed;
double l, w;
double least_vol,max_vol;
while (cin >> l >> w){
max_vol = quadratic_solver(12, -4 * w - 4 * l, l * w);
least_vol = min(l, w) / 2;
cout << max_vol << " 0.000 " << least_vol << endl;
}
return 0;
}
Что я в основном делаю:
Значение «x» для самого большого объема — это то, где наклон этой функции:
f (x) = (L — 2x) (W — 2x) x
0, поэтому 12 (x ^ 2) + x (-4W — L) + LW.
Это квадратичная функция, поэтому я решаю ее для х, и это будет «х» для самого большого объема.
Для минимального объема есть два ответа:
х = 0 и
Когда L — 2x или W — 2x — 0.
Мы не знаем, что ни L, ни W не являются отрицательными числами, поэтому x — это min (W, L) / 2 для наименьшего объема.
Хотя я использовал инструментарий UVA на веб-сайте, и мои ответы были правильными примерно для 20 случаев, когда я фактически представляю его, он говорит, что моя программа дает неправильный ответ.
Любая помощь?
Спасибо!
Задача ещё не решена.
Других решений пока нет …