Решение задачи будет гораздо проще, если заметить, что остаток от деления шестнадцатеричного числа на 5 совпадает с остатком от деления на 5 его суммы цифр.
Действительно, доказываем по индукции:
- Для числа из одной цифры это тривиально: число из одной цифры совпадает со своей суммой цифр.
- Переход: пусть число из k цифр ...xyz дает такой же остаток при делении на 5, что и сумма цифр ... + x + y + z. Покажем, что число из (k + 1) цифры ...xyzt дает такой же остаток, что и сумма цифр ... + x + y + z + t: ...xyzt = 16 * ...xyz + t = 15 * ...xyz + (...xyz + t). Первое слагаемое делится на 5, второе по предположению дает такой же остаток, что и (... + x + y + z) + t, что и требовалось.
У любой перестановки сумма цифр такая же, так что и остатки от деления на 5 совпадают. Так что осталось найти сумму цифр исходного числа и найти остаток от деления её на 5, это и будет ответом.
Python 3:
digits = "0123456789abcdef"
n = input()
s = sum(digits.index(digit) for digit in n)
print(s % 5)
using System;
using System.Linq;
namespace Prog
{
public class Program
{
public static void Main(string[] args)
{
Random rnd = new Random();
int len = rnd.Next(5,30);
int[] A = new int[len];
for (int i = 0; i < len; i++)
A[i] = rnd.Next(-50, 50);
Console.WriteLine("{0}", string.Join(" ", A));
var B = Array.FindAll(A, i => i >= A[Array.IndexOf(A, A.Max())-1]);
foreach (int i in B)
Console.Write(i+" ");
}
}
}
const n=10;
var
x: array [1..n] of integer;
kmax,k, smax : integer;
begin
randomize;
smax:=-99;
for k:=1 to n do
begin
x[k]:=random(70)-35;
write(x[k],' ');
if x[k]>smax then
begin
smax:= x[k];
kmax:=k;
end;
end;
writeln();
writeln(smax);
writeln(kmax);
end.
Логическое сложение это 1)Дизъюнкция; 9)ИЛИ; 5)Истинно тогда и только тогда, когда истино хотя бы одно входящее в него высказывание.
Логическое отрицание это 3)Инверсия; 8)Не; 6)Истинное высказывание делает ложным, а ложное - истиным.
Логическое умножение это 2)Конъюнкция; 7)И; 4)Истино тогда и только тогда, когда истины все входящие в него высказывания.