Sos!!!

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Sos!!!

Re: Sos!!!

Колядин Максим » 05 мар 2007, 19:07

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

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

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

Re: Sos!!!

Хыиуду » 05 мар 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.

Re: Sos!!!

somewhere » 05 мар 2007, 10:06

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

Re: Sos!!!

Duncon » 05 мар 2007, 09:51

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

Re: Sos!!!

Oleg_Rus » 05 мар 2007, 09:45

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

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

Re: Sos!!!

Oleg_Rus » 05 мар 2007, 09:43

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

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

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

Re: Sos!!!

somewhere » 05 мар 2007, 09:20

&quot писал(а):b[k]:=a[n, n];
А смысл-то какой одно и тоже число дублировать?
&quot писал(а):// просотр массива
for i:=1 to n do
for j:=1 to n do
begin
b[k]:=a[n, n];
inc(k);
end;
Да и вообще лишняя операция - можно сделать на месте
&quot писал(а):for i:=1 to n do
for j:=1 to n do
if b=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)

Re: Sos!!!

Oleg_Rus » 05 мар 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=b[j] then Razn:=True;

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

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

Re: Sos!!!

Oleg_Rus » 05 мар 2007, 04:57

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

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

Re: Sos!!!

San4ez » 03 мар 2007, 19:32

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

Вернуться к началу