Задача взята с сайта e-olimp.com
Условие задачи
Задано трехзначное число. Какая цифра в нем больше: первая или последняя?
Входные данные
Одно трехзначное число.
Выходные данные
Вывести большую из указанных цифр. В случае их равенства вывести знак «=» (без кавычек).
Тесты:
Входные данные | Результат | |
1 | 328 | 8 |
2 | 956 | 9 |
3 | 384 | 4 |
4 | 672 | 6 |
5 | 558 | 8 |
6 | 733 | 7 |
7 | 797 | = |
8 | 555 | = |
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> using namespace std; int main() { int n,a,b; cin >> n; a=(n/100); b=(n%10); cout << (a==b ? (char)(61) : (a>b ? (char)(48+a) : (char)(48+b))); return 0; } |
Пояснение:
Для того чтобы определить первую цифру [latex] (a) [/latex] трехзначного числа [latex]n[/latex] необходимо найти целую часть от деления этого числа на сто, воспользовавшись формулой [latex]a = n/100[/latex]. Чтобы определить вторую цифру [latex] (b) [/latex] необходимо найти остаток от деления числа на десять, воспользовавшись формулой [latex]b=n[/latex][latex]\%[/latex][latex]10[/latex] . Затем необходимо проверить равны ли эти цифры, если нет-найти большую.
Засчитанное решение на e-olymp.com
Выражение b=(n%100)%10; избыточно. Остаток от деления на 10 не меняется после взятия остатка от деления на 100.
Пусть n = 100 * x + 10 * y + z;
n % 10 = z;
n % 100 = 10* y + z;
(10* y + z) % 10 = z.
И ещё
— зачем такое странное объединение условной операции и условного оператора? Избавьтесь от if.
— тесты не полные, нужно проверить все случаи.
— нет ключевых слов (tag).
Спасибо, исправила.
Так избавляться от условного оператора нечестно 🙂
Давайте уточню. В строке 9 должен быт один cout, а не два. И никаких if, пожалуйста.
Молодец. Справились с моей головоломкой 🙂
Зачтено.
Поняли в чём проблема, почему приходится так сложно выводить?
Из-за тернарной операции. у обоих вариантов результата должен быть один и тот же тип. А вам нужен то символ (=), то число. Если оставить просто печать a или b, то в случае равенства будет печататься 61 — код символа ‘=’.