PDA

Просмотр полной версии : Sos!!!



San4ez
02.03.2007, 14:18
Ребятки, вы тут все такие умницы.... помогите решить задачку....

San4ez
02.03.2007, 14:20
Задача такова:

Дана целочисленная квадратная матрица A (n,n).роверьте, являются ли все числа, расположенных выше главной и побочной диагоналей: различными способам.

Хыиуду
02.03.2007, 15:23
Ответ: все числа в целочисленной квадратичной матрице A(n,n) выше главной и побочной диагоналей, являются числами, а не различными способами.

На будущее - темы надо называть осмысленно

Колядин Максим
02.03.2007, 16:13
Задача такова:

Дана целочисленная квадратная матрица A (n,n).роверьте, являются ли все числа, расположенных выше главной и побочной диагоналей: различными способам.
Что за ".роверьте", что за "числа, расположенных" и что за "выше главной и побочной диагоналей: различными способам."???
P. S. Попробуй сам понять смысл поставленного тобой вопроса...

San4ez
02.03.2007, 18:19
Ещё раз пишу...

Дана целочисленная квадратная матрица A (n,n). Проверьте, являются ли все числа различными, расположенные выше главной и побочной диагоналей.

San4ez
03.03.2007, 19:32
Ребятки, ну, помогите...!!!! Плиииизззз! )))))

Oleg_Rus
05.03.2007, 04:57
можно устроить прогон по матрице, занести все числа в одномерный массив, и проверяем на различность.

все просто...

Oleg_Rus
05.03.2007, 05:00
Razn:=False;

// просотр массива
for i:=1 to n do
for j:=1 to n do
begin
b[k]:=a[n, n];
inc(k);
end;

// проверка
for i:=1 to n do
for j:=1 to n do
if b[i]=b[j] then Razn:=True;

if Razn then writeln('Yes') else Writeln('No');
________________

если кто увидит ошибку, проссьба - известить!

somewhere
05.03.2007, 09:20
b[k]:=a[n, n];
А смысл-то какой одно и тоже число дублировать?

// просотр массива
for i:=1 to n do
for j:=1 to n do
begin
b[k]:=a[n, n];
inc(k);
end;
Да и вообще лишняя операция - можно сделать на месте

for i:=1 to n do
for j:=1 to n do
if b[i]=b[j] then Razn:=True;
Что-то тяжело до меня доходит зачем такая вложенность? Не проще-ли так?


for i:=1 to n-1 do if b[i]=b[i+1] then Razn:=True;

А лучше так


I := 2;
While (i<n) and (b[i]<>b[i-1]) do inc(I);
Razn := (I=n);

Вообще задача - установить различие элементов ВЫШЕ главной и побочной диагоналей. Координато этих элементов легко установить, из них исключить те, которые принадлежат главной (X=Y) и побочной (X=N-Y+1)

Oleg_Rus
05.03.2007, 09:43
// цитата от Somewhere
for i:=1 to n-1 do if b[i]=b[i+1] then Razn:=True;

а тебе не кажется, что здесь она проверит только два стоящих рядом элемента?
а если будет так 1 3 4 1?

провериться только 1 и 2, 2 и 3, 3 и 4, а 1 и 4 не сравниваются...

Oleg_Rus
05.03.2007, 09:45
// цитата от Somewhere
Да и вообще лишняя операция - можно сделать на месте

вероятно можно, но мне кажется так более понятно...

Duncon
05.03.2007, 09:51
Oleg_Rus, скачай себе книжку наконец почитай про циклы - ты их не понимаешь..
Понятно, не есть задача программиста - важен оптимзированный код, а не красивый в написании..

somewhere
05.03.2007, 10:06
а тебе не кажется, что здесь она проверит только два стоящих рядом элемента?
а если будет так 1 3 4 1?
Это код, который вероятно хотел написать ты.
Для справки - нет нужды проверять все и вся на равенство. Элементы по сути образуют логическую цепочку. Каждые два соседних меняют логику общего результата. И если хотя бы одна пара не равна - тогда общий результат - False;

Хыиуду
05.03.2007, 17:24
Если N невелико, можно сделать так:


var P:set of integer;
begin
for i:=1 to n do
for j:=1 to n do
if {число A[i,j] находится там где надо:}
if A[i,j] in P then begin writeln('No'); exit;end
else include(A[i,j],P)
writeln('Yes');
end.

Колядин Максим
05.03.2007, 19:07
// цитата от Somewhere
Да и вообще лишняя операция - можно сделать на месте

вероятно можно, но мне кажется так более понятно...

На будущее - цитаты пишутся так:
[Quote=Хыиуду] Если N невелико, можно сделать так: .... [/quotе]