Это такие числа как 1 2 3 5 7 9 11 13 15 17 и тд
Пусть количество флешек равно соответственно a1, a2, a3, a4, причем эти количества уже отсортированы таким образом, что a1≥a2≥a3≥a4.
Рассмотрим худший случай. Выбрали 3 комплекта флешек с максимальным их количеством. a1+a2+a3. После этого добавили одну флешку и получили 100 флешек, среди которых хотя бы одна из наименьшей группы. То есть a1+a2+a3=99 в худшем случае. Значит, a4=113-99=14.
Теперь надо определить наименьшее количество флешек, чтобы гарантированно на руках было 3 вида. Опять же рассмотрим худший случай. Так выбрали флешки, что среди них все флешки первого вида, все флешки второго вида. Но все равно одной флешки третьего вида не хватает. В худшем случае значение a1+a2 должно быть максимально возможным. Казалось бы, есть условие a1+a2+a3=99. Но не стоит забывать про то, что ранее были наложены ограничения на a1, a2, a3, a4: <span>a1≥a2≥a3≥a4. В связи с добавленным позже определением a4=14, ограничение для a3 становится таким: a3</span>≥14. В худшем случае, чтобы максимизировать a1+a2, следует выбрать a3=14. То есть a1+a2=99-14=85. Следовательно, необходимо 85+1=86 флешек, чтобы быть уверенным, что хотя бы три флешки разных видов присутствуют.
<em>// PascalABC.NET 3.3, сборка 1555 от 21.10.2017</em>
<em>// Внимание! Если программа не работает, обновите версию!</em>
begin
var n:=ReadInteger('Количество строк в матрице:');
var m:=ReadInteger('Количество столбцов в матрице:');
Writeln('Вводите элементы матрицы построчно');
var a:=new real[n,m];
var b:=new real[n];
for var i:=0 to n-1 do begin
b[i]:=0;
for var j:=0 to m-1 do begin
Read(a[i,j]);
b[i]+=Sqr(a[i,j])
end;
b[i]:=Sqrt(b[i])
end;
Writeln('Сформированный вектор');
b.Println;
end.
<u>Пример</u>
Количество строк в матрице: 4
Количество столбцов в матрице: 3
Вводите элементы матрицы построчно
3.4 5.1 8
-1 0 1
-5.34 1.777 5
3 4 5
Сформированный вектор
10.0781942827076 1.4142135623731 7.52816903370268 7.07106781186548
Правильный ответ: Г) <span>2,3,5,6,7,9,10,15,21,27</span>