0 / 0 / 0 Регистрация: 21.11.2009 Сообщений: 10 |
|
1 |
|
Поиск повторяющихся элементов в массиве09.12.2009, 20:36. Показов 19353. Ответов 1
дайте, пожалуйста, программный код нахождения повторяющихся элементов в массиве. заранее благодарю!
0 |
Тамила 753 / 546 / 211 Регистрация: 12.11.2009 Сообщений: 1,100 |
||||
09.12.2009, 20:44 |
2 |
|||
Решение
2 |
Здравствуйте. В колледже весь курс проходили паскаль и настало время практики. Дали индивидуальные задания и сроки. Не скажу, что паскалем владею в совершенстве, скорее на уровне опытного пользователя. В задании было всего 5 задач, 4 из которых успешно выполнены и записаны в отчёт, а вот с пятой возникли трудности.
Текст задачи:
Дан двумерный массив положительных целых чисел. Известно, что в нём присутствуют совпадающие элементы (одинаковые числа). Вывести их индексы.
Всё вроде бы и звучит просто и не должно занимать много времени, но придумать алгоритм не могу. Заранее благодарю.
αλεχολυτ♦
28.4k10 золотых знаков56 серебряных знаков118 бронзовых знаков
задан 18 июн 2012 в 18:27
1
Создаём массив индексов, т.е. заполняем массив натуральным рядом. Берём первый элемент, сравниваем с остальными в цикле. Индексы меньших записываем в один массив, больших — в другой (или с конца или сначала к середине нового массива), индексы равных выводим. Повторяем рекурсивно то же для меньших и для больших пока длина больше 1.
ответ дан 18 июн 2012 в 21:16
sercxjosercxjo
6,8842 золотых знака26 серебряных знаков55 бронзовых знаков
1 берем первый элемент проверяем с остальными
2 если попадается одинаковый — выводим индекс копии и индекс проверяемого элемента
3 крутимся в цикле пока есть елементы в массиве
Хорошо бы ввести проверку типа, если индекс копии меньше индекса проверяемого элемента — нечего не делать, так как он уже будет учтен
ответ дан 18 июн 2012 в 18:36
GoretsGorets
12.4k1 золотой знак19 серебряных знаков43 бронзовых знака
3
Стандартный алгоритм требует каждый раз пробегаться по всем элементам для сравнения.
Можно сделать еще трехмерный массив где будут сохраняться значения вида (число, индекс в первоначальном массиве) и отсортировать по возрастанию.
Получится чтото типа 10, 19, 89, 128, 170, 230, 300, …
Далее берем число1 из первого массива и сравниваем. Если число1 становится меньше числа из второго массива то break
экономим N/2 пробежек на каждом проходе
ответ дан 18 июн 2012 в 22:08
ТентаклькоацтльТентаклькоацтль
3101 золотой знак2 серебряных знака12 бронзовых знаков
const N=10; var a,b:array [1..N] of integer; i, j, k,l:integer; z:boolean; begin randomize; for i:=1 to N do begin a[i]:= random(1,N); write(a[i]:3); end; writeln; l:=0; write('Эти числа повторяются: '); for i:= 1 to N do for j:= i+1 to N do if a[i]=a[j] then begin z:=true; for k:=1 to l do if a[i]=b[k] then begin z:=false; break; end; if z then begin l:=l+1; b[l]:=a[i]; end; end; if l=0 then writeln('отсутствуют повторяющиеся элементы') else for i:=1 to l do write(b[i],' '); end.
Поиск в массиве одинаковых элементов
- В этой теме 0 ответов, 1 участник, последнее обновление 6 лет, 2 месяца назад сделано Васильев Владимир Сергеевич.
-
Сообщения
-
-
На языке Pascal проверить есть ли в заполненном случайными числами массиве элементы с одинаковыми значениями.
program arrays_9; uses crt; var n, i, j: integer; b: boolean; A: array[1..100] of integer; begin clrscr; randomize; b:=false; write('Количество элементов > '); read(n); for i:=1 to n do begin A[i]:=random(10); write(A[i], ' '); if i>1 then for j:=i-1 downto 1 do if A[i]=A[j] then b:=true; end; if b then write('Одинаковые элементы в массиве имеются') else write('Одинаковых элементов в массиве нет'); readkey; end.
-
-
Автор
Сообщения
- Для ответа в этой теме необходимо авторизоваться.
5
1 ответ:
0
0
Var a: array[1..10] of integer;
var i, j, ans:integer;
begin
ans:=0;
for i:=1 to 10 do
begin readln(a[i]);
end;
for i:=1 to 10 do
begin
for j:=i+1 to 10 do
begin
if a[i]=a[j] then ans:=ans+1;
end;
end;
if ans>0 then writeln(‘есть’)
else writeln(‘нет’);
end.<span> </span>
Читайте также
#include «pch.h»
#include <iostream>
using namespace std;
int main()
{
cout << «2nn0nn4t2nn3t3nn6t4t2nn6t6t6nn8t6t4t2nn9t9t9t9»;
system («pause»);
return 0;
}
Компилятор: Microsoft Visual Studio 2017 15.8.1
Найдем кол-во символов в сообщении:
K=32*40*8=10240
Найдем информационный объем одного символа:
10 кб переводим в биты: 10*1024*8=81920, тогда информационный объем одного символа (i) = 81920/10240 = 8, тогда кол-во символов в алфавите (N):
N=2^i (2 в степени i) = 2^8 = 256.
Ответ: в алфавите 256 символов
На всякий случай сделал проверку и на русские, и на английские.
<em>задача 1.</em>
uses crt;
var i:integer;
s:string;
begin
i:=1;
read(s);
repeat
if (s[i]=’a’) or (s[i]=’а’) then
s:=copy(s,1,i)+’ ‘+copy(s,i+1,length(s));
i:=i+1;
until i=length(s)+1;
writeln(s);
<span>end.
<em>задача 2.</em>
uses crt;
var i:integer;
s:string;
begin
i:=1;
read(s);
repeat
if (s[i]=’о’) or (s[i]=’o’) then
s:=copy(s,1,i-1)+’ ‘+copy(s,i+1,length(s));
i:=i+1;
until i=length(s)+1;
writeln(s);
<span>end.</span>
</span>
Ответ:
n = int(input())
a = [int(i) for i in input().split()]
print(*[i for i in a if not i % 2])
Объяснение:
//PascalABC.Net 3.1 сборка 1200
uses System;
begin
var Replace4to16 := new Dictionary<string, string>();
Replace4to16.Add(’00’, ‘0’);
Replace4to16.Add(’01’, ‘1’);
Replace4to16.Add(’02’, ‘2’);
Replace4to16.Add(’03’, ‘3’);
Replace4to16.Add(’10’, ‘4’);
Replace4to16.Add(’11’, ‘5’);
Replace4to16.Add(’12’, ‘6’);
Replace4to16.Add(’13’, ‘7’);
Replace4to16.Add(’20’, ‘8’);
Replace4to16.Add(’21’, ‘9’);
Replace4to16.Add(’22’, ‘a’);
Replace4to16.Add(’23’, ‘b’);
Replace4to16.Add(’30’, ‘c’);
Replace4to16.Add(’31’, ‘d’);
Replace4to16.Add(’32’, ‘e’);
Replace4to16.Add(’33’, ‘f’);
var n4 := ReadString(‘a_4 = ‘);
if n4.Length mod 2 = 1 then n4 := ‘0’ + n4;
var n16 := »;
for var i := 0 to n4.Length div 2 — 1 do
if Replace4to16.ContainsKey(n4.Substring(2 * i, 2)) then
n16 += Replace4to16[n4.Substring(2 * i, 2)]
else writeln(‘Неверные знаки «‘, n4.Substring(2 * i, 2), ‘» в числе’);
writeln(n16);
end.