Задача. Даны действительные числа [latex] x, y, z.[/latex] Вывести наименьшее и наибольшее из них. Если наименьших или наибольших чисел окажется несколько, то укажите в скобках количество.
Тесты
[latex] x [/latex] | [latex] y [/latex] | [latex]z[/latex] | Наименьшее число | Наибольшее число |
100.56 | 812.34 | -12 | -12 | 812.34 |
-722.5 | 812.34 | -722.5 | -722.5 (2) | 812.34 |
256 | 145695 | 145695 | 256 | 145695 (2) |
0 | 0 | 0 | 0 (3) | 0(3) |
-518.3 | -759.3 | -1995.6 | -1995.6 | -518.3 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#include <iostream> using namespace std; int main() { long double x, y, z, min, max; int counter, number; counter = 1; number = 1; cin >> x >> y >> z; min = 0; min = x; if(y < min){ min = y; counter = 1; } else if(y == min){ counter ++; } if(z < min){ min = z; counter = 1; } else if (z == min){ counter++; } max = 0; max = y; if(x > max){ max = x; number = 1; } else if(x == max){ number ++; } if(z > max){ max = z; number = 1; } else if(z == max){ number ++; } if(counter !=1 ){ cout << min << "("<<counter<<")" << endl; } else { cout << min << endl; } if(number != 1){ cout << max << "("<<number<<")" << endl; } else { cout << max << endl; } return 0; } |
Здесь находится код в ideone.com
Решение
- Так как по условию нам даны действительные числа, то, чтобы охватить наибольший диапазон чисел, используем тип данных long double;
- Для того, чтобы решить данную задачу мы предполагаем, что одна из переменных является наименьшей[latex] (x=min)[/latex] , а потом сравниваем ее с остальными переменными.
- Возможно, наше предположение верно. Тогда присваиваем счетчику значение [latex] 1 [/latex]. Если какая-либо из оставшихся переменных равна минимуму, то увеличиваем значение счетчика на единицу.
- Если значение переменной [latex] y[/latex] или [latex] z[/latex] меньше минимума, то наше предположение было не верно. Тогда присваиваем значение минимального числа соответствующей переменной, а счетчику — значение [latex] 1 [/latex] . Если несколько переменных имеют наименьшее значение, то при каждом совпадении значения счетчик увеличивается на единицу.
- Аналогичный подход применяем к максимальному значению.
Всего возможно 11 различных взаимоисключающих вариантов для распределения минимумов и максимумов. Это значит, что вполне достаточно 10 условных операторов. Значит у Вас два лишних.
Ну, и лесенку (отступы) поправьте, пожалуйста.
Спасибо, Игорь Евгеньевич, учла замечания.
Не совсем. Давайте посмотрим на две соседние строчки Вашего кода.
Какая причина того, что вторая сдвинута вправо относительно первой? Скорее всего дело в том, что Вы иногда используете табуляцию, иногда забиваете пространство пробелами. Соотношение между табуляцией и пробелами определяется в момент отображения и может быть любым. Это означает, что комбинируя эти два способа Вы рискуете, что всё превратится в кашу при переносе в другое место или при изменении настроек.
Спасибо, лесенку поправила.
Думаю Вы разобрались с этим деревом принятия решений. Зачтено.
Поздравляю, Вы полностью выполнили программу сентября. Поздновато… но выполнили.