Ссылка на e-olymp.com.
Задача
Дано трёхзначное натуральное число $n$. Определить сумму наибольшего и наименьшего трёхзначных чисел, которые могут быть образованы из числа $n$ перестановкой цифр.
Входные данные
Натуральное число $n$ $(100 ≤ n ≤ 999)$.
Выходные данные
Вывести сумму наибольшего и наименьшего трёхзначных чисел
Тесты
№ | Входные данные | Выходные данные |
1 | 123 | 444 |
2 | 524 | 787 |
3 | 100 | 200 |
4 | 777 | 1554 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Test { static function main() { var n = 524; var arr = [Std.int(n/100), Std.int((n%100)/10), Std.int(n%10)]; arr.sort(function(a, b):Int { if (a > b) return 1; else if (a < b) return -1; return 0; }); if (arr[0]!=0) trace(arr[0]*101 + arr[1]*20 + arr[2]*101); else if (arr[1]!=0) trace(arr[1]*110 + arr[2]*101); else trace(arr[2]*200); } } |
Решение
Заданное число разбиваем на цифры: для получения сотен число делится на сто, для десятков — остаток деления на сто делится на десять, для сотен — остаток деления на десять. Все числа округляются в сторону нуля и записываются в массив, который отсортировывается с помощью функции
sort, входным параметром которой является функция, которая возвращает $(0, 1$ или $-1)$. Далее проверяется, нет ли в числе нулей. Если нулей в числе нет, то сумма считается по формуле $(100·a[0]+10·a[1]+a[2]+100·a[2]+10·a[1]+a[0])=$ $=arr[0]·101+arr[1]·20+arr[2]·101$. Если же ноль есть, то делается проверка на ноль в следующем элементе. Если ноль есть, сумма считается по формуле $arr[1]·100+arr[2]·1+arr[1]·1+arr[2]·100=arr[1]·110+arr[2]·101$, иначе последний элемент умножается на $200$. Все эти проверки делаются для того, чтобы для чисел, в которых есть нули, минимальное число, которое генерируем для суммы, было трехзначным.
- e-olymp 903. Первая или последняя? - 21.06.2017
- e-olymp 916. Интересное произведение - 21.06.2017
- e-olymp 2392. Интересная сумма - 20.06.2017