Array49. Дан целочисленный массив размера $$N$$. Если он является перестановкой, то есть содержит все числа от $$1$$ до $$N$$, то вывести $$0$$; в противном случае вывести номер первого недопустимого элемента.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
program Array49; var a:array[1..10] of integer; N,i,i2:Integer; check: Boolean; begin Write('N: '); Readln(N); for i:=1 to N do begin write(i,' :'); readln(a[i]); end; for i:=1 to N do begin check:=False; for i2:=1 to N do if i=a[i2] then check:=True; if not(check) then begin Writeln (i); break; end; end; if check then Writeln(0); end. |
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
program Array49; type tp = set of byte; var a:array[1..10] of integer; N,i,i2:Integer; check: Boolean; r : tp; begin Write('N: '); Readln(N); for i:=1 to N do begin write(i,' :'); readln(a[i]); end; r:=[1..N]; for i:=1 to N do if a[i] in r then r:=r-[a[i]] else break; if r=[] then Writeln(0) else Writeln(i); end. |
Решение olegst1975:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var n,i,i1,check:integer; a:array [1..10]of integer; begin readln(n); for i:=1 to n do readln(a[i]); check:=0; for i:=n downto 1 do if (a[i]<1)or(a[i]>n) then check:=i; for i:=1 to n-1 do for i1:=i+1 to n do if a[i]=a[i1] then if (check=0)or(i1<check) then check:=i1; write(check); end. |
Задачи из раздела Array можно посмотреть здесь.
С 29 строкой разобраться + рассмотреть вариант когда a[i] выходит за интервал [1..N].
Мое видение, но верю. что можно лучше)
[/crayon]
Поясню, я использовал значение i которое получается после прохождения цикла for, но это значение различно в разных компиляторах. Поправил:
Было:
Стало:
я правильно понимаю алгоритм:
снчала узнаём, что значения не выходят из пределов от 1 до N,
а потом смотрим нет ли сдвоенных значений?
если есть запоминаем какое?
Да и к стати… можно ещё и множества использовать… добавил решение.
22 строка первого решения нужно поменять на
но даже если поменять, как я написал выше (в случае массива 5,2,3,4,6), то и такой массив проглотит 5,2,3,4,2, а это неправильно