Пусть у вас завтра экзамен по программированию (а у некоторых он точно завтра). И вы сегодня узнали, что завтра вам предложат вот такую простую задачку.
Задача: Дан массив 100 на 100. Элементы массива типа byte. Нужно предложить алгоритм определения, есть ли в этом массиве повторяющиеся элементы. Алгоритм должен работать правильно и максимально быстро. Язык программирования, ну например, Паскаль (для удобства, чтобы всем было понятно)
Объявляется конкурс на самую короткую и эффективную программу. Приз: пользователям сайта плюс один балл в репутацию.
Похожие публикации
2011-01-20 • Просмотров [ 4518 ]
Код на Си (Паскаль не знаю):
#include <stdio.h>
#include <conio.h>
int main()
{
bool Flag = false;
bool A[100][100] = {0};
for (int J = 0; J < 99; J++)
{
for (int I = 0; I < 99; I++)
{
if ((A[J][I] == A[J][I+1]) || (A[J][I] == A[J+1][I]))
{
Flag = true;
break;
}
}
if (Flag == true) break;
}
if (Flag == true) printf("true"); else printf("false");
getch();
return 0;
}
например так:
randomize;
for i:=1 to 100 do
for j:=1 to 100 do
a[i,j]:=random(256);
writeln("Повторы есть");
там я пропустила {i,j,n,m:byte}
begin
for i:=1 to 100 do
begin
n:=100-i+1;
for j:=1 to 100 do
begin
m:=100-j+1;
if a[i,j]=a[n,m] then writeln('повторяются');
end;
end;
end.
var i,j: ar: array [1..100,1..100] of byte;//каким-то образом заполненый
flag: boolean;
begin
for i:=1 to 100 do
begin
n:=100-i+1;
for j:=1 to 100 do
begin
m:=100-j+1;
if a[i,j]=a[n,m] then
begin
flag:=true;
break; //не помню как в паскале, но у других языках есть параметры которые уазывают глубину прерывания.
end;
end;
end;
if flag then writeln('povtoryautsya');
end.
еще есть вариант - это все преобразовать в рекурсию, но думаю и так сойдет.