Даны цело численный массив А [1: n] и число М. Найти множество элементов А [i1], А [i2], ..., А [ik] (1< i1 < ... < ik < n), что А [i1] + А
10-11 класс
|
[i2] + ... А [ik] = М.
описание алгоритма: задан список А и число M, n = len(A). для того чтобы найти все возможные варианты выборки из А необходимо построить множество двоичных чисел от 1 до 2^n-1 и складывать только те индексы разряд которого которого в двоичном числе равен 1, т.е. для двоичного числа 1100 это будут индексы 2 и 3.
Если сумма будет равна М вывести последовательность индексов, иначе идем далее
Язык Python
A=[21,4,5,4,32] #Задание массива А
M = 9 #Задание М
for i in range(1, 2**len(A)-1): # для всех i от 1 до 2^n-1
ind = [] # список индексов используемых в данной итерации
cnt = 0 # сумма элементов А
for j in range(len(A)): # для всех j от 0 до n
if i&2**j: # Если индекс есть в бинарной записи i, то
cnt += A[j] # прибавить к сумме A[j]
ind.append(str(j)) # запомнить индекс
if cnt > M: break # если сумма больше M выходим из цикла
if cnt == M: # если сумма равна M
print ', '.join(ind) # печатаем список эффективных индексов
для данной программы будет выдано две строки
1,2
2,3
Другие вопросы из категории
1. модифицируйте предыдущий пример, так чтобы программа определяла максимальный и минимальный элемент массива
2. Напишите программу, которая бы определяла среднее арифметическое значение элементов массива (вещественная величина типа real)
Начало:
var a: array[1..10] of integer;
i: integer;
begin
а как дальше?
Предыдущий пример:
var a: array[1..10] of integer;
i: integer;
begin
randomize;
for i:=1 to 10 do
begina[i]:=random(40)-20;
end;
for i:=1write(a[i]:4);
end.
значений X истинно высказывание
¬ ((X>2) → (X>3))?
1) 1 2) 2
3) 3
тиражирования накопленных знаний; в) для больших сетей невозможность заранее даже приблизительно оценить время обучения сети г) создание новых знаний внутри сети в процессе переработки входных данных.
координаты точки на плоскости (х,у — действительные числа) и определяет
принадлежность точки заштрихованной области, включая ее границы. Программист
торопился и написал программу неправильно.
Читайте также
нечетных местах , сменить знак на противоположный ,иначе выдать соответствующее сообщение.
2.Дан массив X(N,M) . Среди четных столбцов массива найти сумму положительных элементов
3.Найти произведение элементов каждого столбца массива принадлежащих промежутку [2,6] . Из полученных значений сформировать одномерный массив.
расположенных между максимальным и минимальным элементами.
Дан одномерный массив, состоящий из вещественных элементов. Найти произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами
ну или исправьте мое пжл
program fgf;
var mas:array[1..100] of real;
max,min:real;
i,n,c,b:shortint;
p:real;
f1,g:text;
begin;
assign (f1, 'input.txt');
reset (f1);
readln (f1, n);
for i:=1 to N do read (mas[i]);
max:=mas[i];
for i:=2 to N do begin
if mas[i]>max then begin
max:=mas[i];
c:=i;
end;
end;
min:=mas[1];
for i:=2 to N do begin
if mas[i]<min then begin
max:=mas[i];
b:=i;
end;
end;
close(f1);
assign (g, 'output.txt');
rewrite (g);
p:=1;
if b<c then I:=b+1 and c-1
else for I:=c+1 to b-1 do p:=p*mas[i];
if (n<3) or (b+1=c) or (c+1=b) then writeln(g,'0.00') else write(p:3:3) ;
close (g);
end.
вывести наименьшую нечетную сумму двух соседних элементов массива.
ими способами,вкратце обьяснить что вы написали чтобы понятно было)