Составим таблицу, где по горизонтале расположим страны, по вертикали номера высказываний, а в середине места, которые могут занять команды по мнению экспертов.
Г И К Р У
1. 1 3
2. 4 5
3. 4 1
4. 2 1
5. 1 5
Если мы предположим в первом высказывании, что правда - это Китай на 1 месте, то проследив дальше, мы столкнемся, что украина и италия должны быть одновременно на 5, а этого быть не может.
Тогда предполагаем, что в первом высказывании верно утверждение - украина на 3 месте и все выстраивается:
1 место - Россия, 2 место - Китай, 3 место - Украина, 4 место - Германия, 5 место - Италия.
Const nn=100; { предельное количество номиналов банкнот } type bnk=longint; var nom,res:array[1..nn] of bnk; i,n,koln:integer; sum:bnk;
procedure Sort(n:integer); var i,j:integer; t:bnk; begin for i := 1 to n-1 do for j := 1 to n-i do if nom[j] > nom[j+1] then begin t := nom[j]; nom[j] := nom[j+1]; nom[j+1] := t end end;
begin Readln(n); for i:=1 to n do Read(nom[i]); Readln(sum); Sort(n); koln:=0; i:=n; while sum>0 do begin while nom[i]>sum do Dec(i); Inc(koln); res[koln]:=nom[i]; sum:=sum mod nom[i]; if (sum<nom[1]) and (sum<>0) then begin sum:=0; koln:=-1 end end; if koln=0 then koln:=-1; Writeln(koln); for i:=1 to koln do Write(res[i],' '); Writeln end.
Составим таблицу, где по горизонтале расположим страны, по вертикали номера высказываний, а в середине места, которые могут занять команды по мнению экспертов.
Г И К Р У
1. 1 3
2. 4 5
3. 4 1
4. 2 1
5. 1 5
Если мы предположим в первом высказывании, что правда - это Китай на 1 месте, то проследив дальше, мы столкнемся, что украина и италия должны быть одновременно на 5, а этого быть не может.
Тогда предполагаем, что в первом высказывании верно утверждение - украина на 3 месте и все выстраивается:
1 место - Россия, 2 место - Китай, 3 место - Украина, 4 место - Германия, 5 место - Италия.
nn=100; { предельное количество номиналов банкнот }
type
bnk=longint;
var
nom,res:array[1..nn] of bnk;
i,n,koln:integer;
sum:bnk;
procedure Sort(n:integer);
var
i,j:integer;
t:bnk;
begin
for i := 1 to n-1 do
for j := 1 to n-i do
if nom[j] > nom[j+1] then
begin t := nom[j]; nom[j] := nom[j+1]; nom[j+1] := t end
end;
begin
Readln(n);
for i:=1 to n do Read(nom[i]);
Readln(sum);
Sort(n);
koln:=0; i:=n;
while sum>0 do begin
while nom[i]>sum do Dec(i);
Inc(koln); res[koln]:=nom[i];
sum:=sum mod nom[i];
if (sum<nom[1]) and (sum<>0) then begin sum:=0; koln:=-1 end
end;
if koln=0 then koln:=-1;
Writeln(koln);
for i:=1 to koln do Write(res[i],' ');
Writeln
end.
Тестовые решения
Контрольный пример:
5
1 3 7 12 32
40
3
32 7 1
Еще один пример:
8
1 5 10 50 100 500 1000 5000
4586
6
1000 500 50 10 5 1