Array95. Дан целочисленный массив размера $$N$$. Удалить из массива все соседние одинаковые элементы, оставив их первые вхождения.
Решение:
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 31 |
program Array95; var n,i,k:integer; a:array [1..10]of integer; begin Write('N: '); Readln(N); Writeln('A: '); for i:=1 to N do begin write(i,' :'); readln(a[i]); end; i:=1; k:=1; while i<n do begin inc(i); if a[k]<>a[i] then begin inc(k); a[k]:=a[i]; end; end; Writeln(k); for i:=1 to k do writeln(i,' :',a[i]); 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 29 |
program Array95; var a : array[1..10] of Integer; N,i,k:Integer; begin Write('N: '); Readln(N); Writeln('A: '); for i:=1 to N do begin write(i,' :'); readln(a[i]); end; repeat k:=0; for i:=2 to N do if a[i-1]=a[i] then k:=i; if k<>0 then begin N:=N-1; for i:=K to N do a[i]:=a[i+1]; end; until (k=0); Writeln(N); for i:=1 to N do writeln(i,' :',a[i]); end. |
Решение от olegst1975:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
var n,i,i1:integer; a:array [1..10]of integer; begin readln(n); for i:=1 to n do readln(a[i]); i:=1; while i<n do if a[i]=a[i+1] then begin dec(n); for i1:=i to n do a[i1]:=a[i1+1]; end else inc(i); for i:=1 to n do writeln(a[i]); end. |
Задачи из раздела Array можно посмотреть здесь.
Почему k= именно 11?
k:=11 потому, что по условиям к задачам массив не должен быть больше 10 элементов, и 11 не может быть при for i:=2 to N do if a[i-1]=a[i] then k:=i;
Но да … как то не красиво выглядит… исправил.
Было:
Стало:
То же самое за один проход
[/crayon]
Какие то сложные решения получаются… непонятные вложенные циклы…. добавил в верх решение по проще…
Хм. А я вот точно так же сделал. Хотя, если разобраться, то первое решение проще и элегантнее.