Задача:
Для заданных целых чисел $a$ и $b$ найти наибольшее и наименьшее целое решение неравенства [latex]ax\leq b [/latex].
Входные данные:
Два целых числа $a$ и $b$, по модулю не превосходящих $1000$.
Выходные данные:
Если неравенство [latex]a x\leq b [/latex] не имеет решений, то вывести no solution.
Если любое действительное число является решением неравенства [latex]ax\leq b [/latex], то вывести all.
Иначе в одной строке вывести наименьшее и наибольшее целое решение неравенства [latex]ax\leq b [/latex]. Если наименьшего целого решения не существует, вывести -INF. Если наибольшего целого решения не существует, вывести INF.
Тесты:
Входные данные | Выходные данные |
0 4 | all |
0 0 | all |
0 -1 | no solution |
289 133 | -INF 0 |
-150 -298 | 2 INF |
3 10 | -INF 3 |
956 0 | -INF 0 |
-3 10 | -3 INF |
-3 0 | 0 INF |
1000 1000 | -INF 1 |
-1000 -1000 | 1 INF |
-1000 1000 | -1 INF |
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> #include <cmath> using namespace std; int main() { float a, b; cin >> a >> b; if (a == 0 && b >= 0) cout << "all"; else if (a == 0 && b < 0) cout << "no solution"; else if ((a > 0 && b >= 0) || (a > 0 && b <= 0)) cout << "-INF " << floor(b / a); else cout << ceil(b / a) << " INF"; return 0; } |
Объяснение:
Задача сводится к решению неравенства $ x\leq\frac{a}{b} $ или $ x\geq\frac{a}{b},$ в зависимости от значений параметров $a$ и $b.$ Поэтому необходимо рассмотреть все возможные варианты значений $a$ и $b$ от которых будет зависеть значение неравенства. Если $a>0$, то выражение будет равносильно $ x\leq\frac{a}{b} $, так как знак неравенства при делении на положительное число не меняется. Поскольку, нам нужно, чтобы $x$ был меньше данного выражения (либо равен), значение которого может быть и дробным (поэтому тип данных $a$ и $b$ дробный, хоть по условию, нам и нужен целый ответ), округляем в меньшую сторону. В обратном случае ($a<0$ и, следовательно, исходное выражение эквивалентно $ x\geq\frac{a}{b}$) нам нужно наоборот, большее значение, поэтому и округление производится в большую сторону. Затем остается рассмотреть только частный случай $a=0$ , что и делается в начале кода.