Даны цело численный массив а [1: n] и число м. найти множество элементов а [i1], а [i2], а [ik] (1< i1 < < ik < n), что а [i1] + а [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
valueva260860
14.09.2021
//java class main { public static void main(string[] args){ int[] a = new int[new java.util.(100)]; for (int i = 0; i < a.length; i++) a[i] = new java.util.(499)+1; for (int i = 0; i < a.length; i++) system.out.print(a[i] + " "); int b = 0; int c = 1; for (int i = 0; i < a.length; i++) if (a[i] % 3 == 0 & & a[i] % 2 == 1 ) { b += a[i]; c *= a[i]; }system.out.print("\nsum: " + b + "\nmulti: " + c); }}проверка: $ javac main.java327 206 226 438 363 169 433 338 75 127 429 77 271 487 384 173 325 169 250 128 432 214 297 31 238 294 307 151 425 1 19 373 136 246 86 368 183 38 92 186 334 64 486 107 285 240 445 480 271 174 8 325 476 143 169 496 254 437 330 227 496 134 460 20 395 387sum: 2346multi: 936904523
alina-bas
14.09.2021
Const n=5; type mass=array[1..n] of integer; var i,p,s: integer; a: mass; begin p: =1; s: =0; for i: =1 to n do read (a[i]); for i: =1 to n do if (a[i] mod 3)=0 and (a[i]mod 2)< > 0 then begin s: =s+a[i]; p: =p*a[i]; end; writeln('summ= ', s); writeln('proizvedinie= ', p); end.
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
Даны цело численный массив а [1: n] и число м. найти множество элементов а [i1], а [i2], а [ik] (1< i1 < < ik < n), что а [i1] + а [i2] + а [ik] = м.