задача 1 урок 23
Primary tabs
задача 1 урок 23
Есть массив целых чисел (10 элементов), например:
[1, 3, 2, 1, 3, 2, 2, 4, 0, -5]
Задача: вывести на экран все числа, которые встречаются нечетное число раз.
Т.е. в данном случае это:2, 4, 0, -5Решите:
любым способом
за 1 прочтение массива (сложность меньше или равную N) с результатом, готовым к выводу, без проверок каждого элемента.
Решение №1
program Project1; type arr = array[1..10] of integer; var i,j,c: integer; a: arr; flag: boolean; function check(b: arr; i: integer): boolean; var j: integer; begin result := false; if i - 1 = 0 then exit; for j := i - 1 downto 1 do if b[i] = b[j] then result := true; end; begin //[1, 3, 2, 1, 3, 2, 2, 4, 0, -5] a[1] := 1; a[2] := 3; a[3] := 2; a[4] := 1; a[5] := 3; a[6] := 2; a[7] := 2; a[8] := 4; a[9] := 0; a[10] := -5; flag := false; for i := 1 to 10 do begin c := 1; flag := check(a, i); if flag = false then begin for j := i + 1 to 10 do begin if a[i] = a[j] then c:= c + 1; end; if (c mod 2) = 1 then write(a[i], ' '); end; end; readln end.
Решение №2
program Project1; type arr = array[1..10] of integer; var i: integer; a: arr; flag: boolean; function check(b: arr; i: integer): boolean; // избегать повторов var j: integer; begin result := false; if i - 1 = 0 then exit; for j := i - 1 downto 1 do if b[i] = b[j] then result := true; end; function find(b: arr; i: integer): integer; // считает кол-во элементов var k, count: integer; begin count := 1; if i = 10 then result := 1 else begin for k := i + 1 to 10 do if b[i] = b[k] then count := count + 1; result := count; end; end; begin //[1, 3, 2, 1, 3, 2, 2, 4, 0, -5] a[1] := 1; a[2] := 3; a[3] := 2; a[4] := 1; a[5] := 3; a[6] := 2; a[7] := 2; a[8] := 4; a[9] := 0; a[10] := -5; for i := 1 to 10 do begin flag := check(a, i); if flag = false then begin if (find(a, i) mod 2) = 1 then write(a[i], ' '); end; end; readln end.
Консоль
[1, 3, 2, 1, 3, 2, 2, 4, 0, -5] 2 4 0 -5
- Log in to post comments
- 531 reads