Дан массив, содержащий 2020 положительных целых чисел не превышающих 15 000. Необходимо найти минимальный элемент, двоичная запись которого заканчивается не более чем одним нулём, уменьшить все нечётные элементы массива, превышающие найденный минимум, на величину этого минимума и вывести измененный массив. Если в массиве нет элементов, двоичная запись которых заканчивается не более чем одним нулем, нужно вывести массив без изменений.
Например, для массива 12, 13, 18, 19, 20, 15 нужно получить и вывести массив, содержащий числа 12, 13, 18, 6, 20, 2.
Программа на Паскале
Вообщем потанцевав с бубном, вроде как пришел к логическому завершению программы. Но есть одни ньансы, первое если поставить массив меньше, программа начнет жестко троить. Возможно я, аля такой херовый цхакер, или просто руки не из плечей) Ну да ладно
const n = 2020; var a: array[1..2020] of integer; b: array[1..2020] of integer; i, min, y: integer; function tobin2(x: integer): string; var s: string; begin s := ''; while x > 0 do begin s := c==hr(ord('0') + x mod 2) + s; //Удалить знак "=" x := x div 2; end; tobin2 := s; end; begin Writeln('Исходный массив'); for i := 1 to n do begin a[i] := Random(1, 15000); Write(a[i], ' '); end; Writeln(); min := a[1]; y := 1; for i := 1 to n do begin b[i] := StrToInt64(tobin2(a[i])); if (b[i] mod 10 = 0) and (((b[i] div 10) mod 10) <> 0) then repeat if min > a[i] then min := a[i]; y += 1; until y > n; end; Writeln('Минимальный элемент: ', Min, '--->', tobin2(min)); Writeln('Преобразованный масив'); for i := 1 to n do begin if (a[i] > min) and (Odd(a[i])) then a[i] := a[i] - min; Write(a[i], ' '); end; end.Что это СиеПрограмка показывает
1. Исходный массив
2. Минимальный элемент и его двоичного собрата))
3. Преобразованный масив
Исходный массив 14410 11670 6510 14010 1820 1520 9150 10944 5734 9675 14241 8625 7342 7267 12148 6811 13002 3015 3154 12772 14079 7601 9272 5673 7575 11451 10275 2864 6589 8974 1077 8940 999 13445 5581 476 12607 9795 9321 7003 11957 9984 11186 11590 9195 13802 2912 7635 12928 4027 6057 3056 1366 9341 14337 6810 2399 837 6436 5369 6246и.т.дМинимальный элемент: 38--->100110 Преобразованный масив 14410 11670 6510 14010 1820 1520 9150 10944 5734 9637 14203 8587 7342 7229 12148 6773 13002 2977 3154 12772 14041 7563 9272 5635 7537 11413 10237 2864 6551 8974 1039 8940 961 13407 5543 476 12569 9757 9283 6965 11919 9984 11186 11590 9157 13802 2912 7597 12928 3989 6019 3056 1366 9303 14299 6810 2361 799 6436 5331 6246 6249 4356 11723 8598 5302 и т.д.==== PascalABC.NET =====
begin
var a := ArrRandom(2020, 1, 15000);
a[:100].Println; // первые 100 чисел
var m := a.Where(p -> p.IsOdd or p.IsEven and (p mod 4 <> 0)).Min;
a.Transform(p -> p.IsOdd and (p > m) ? p - m : p);
Writeln; // отступ
a[:100].Print; // первые 100 чисел
end.