Вася с Петей и Колей заработали много денег. Чтобы не мучиться с дележкой, они решили, что сначала Вася заберет все купюры макси
мального достоинства, затем Петя – минимального , а все оставшиеся – Коля Помогите рассчитать, кто сколько купюр получит. Формат входных данных В первой строке содержится число N (1 ≤ N ≤ 1000000) – количество купюр. Во второй строке записано N натуральных чисел, не превосходящих 109 – номиналы купюр. Формат выходных данных Выведите через пробел три числа: сколько купюр достанется Васе, Пете и Коле соответственно. Пример input.txt | output.txt 4 | 1 2 3 4 | 1 1 2 5 2 2 4 4 4 | 3 2 0
<span>program delehka(input,output); var
a:Array[1..1000010] of longint;
i,n,s,ma,mi,sl:longint;
begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt');
rewrite(output);
readln(n);
mi:=(1 shl 30);
ma:=-(1 shl 30);
for i:=1 to n do
begin
read(a[i]);
ma:=max(ma,a[i]);
mi:=min(mi,a[i]);
end; if ma=mi then write(0,'',n,'',0)
else
begin
for i:=1 to n do begin
if a[i]=ma then s:=s+1;
if a[i]=mi then sl:=sl+1; end;
writeln(s,' ',sl,' ',n-s-sl); close(input);
close(output);
end;
end.</span>
Число 307 в двоичной записи выглядит вот так : <span>100110011 соответственно 5 единиц. (перевести число 307 в двоичную систему и просто посчитать единицы)</span>
Function Check(k : Longint) : Boolean; Var j : Byte; Begin Check:=True; j:=k; While j>0 do Begin If (j mod 10 = 0) or (k mod (j mod 10)<>0) then Check:=False; j:=j div 10; end; end;
Var n,i : Longint; Begin Readln(n); For i:=1 to n do If Check(i) then Writeln(i); end.
Написал программу, на разных тестовых данных ответ соответствовал кол-ву команд + 1, при условии, что ветвление на 2 действия и они идентичны по природе.