|
Вопрос # 3 389/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Это опять я))) У меня легкий вопрос: дана матрица размера n*m, причем m*n<=100, и нужно ее заполнить слэшами "/" и "\" так, чтобы они не сливались, т.е чтоб небыло вот так:
\\
/.
Причем слэшей должно быть максимальное количество!
например 5 на 5
///.\
../.\
\\.\\
\./..
\.///
ну а пустые клетки заполнить точками.
Я сначала пытался уголком заполнять, но уголок не всегда работает, например в тесте 9 на 9 моя прога выводит
/././././
/./././..
/./././//
/././....
/././////
/./......
/.///////
/........
/////////
а правильный вариант на один слэш больше, я только поьом додумался, что это динамическое программирование, помогите плз кто чем может!
 |
Вопрос задал: Черняев Саша (статус: Посетитель)
Вопрос отправлен: 10 ноября 2009, 19:52
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 10; последнее сообщение — 10 ноября 2009, 22:53; участников в обсуждении: 5.
|
Amidamaru (статус: 4-ый класс), 10 ноября 2009, 20:08 [#1]:
я так понял что рядом (всерху/снизу или слева/справа) не должно быть 2х разных слешев? правильно?
и чтобы одинаковые слеши не образовывали линий другсдругом.
|
|
Черняев Саша (статус: Посетитель), 10 ноября 2009, 20:20 [#2]:
да, правильно
|
|
IlluminatI (статус: 2-ой класс), 10 ноября 2009, 20:41 [#3]:
Черняев Саша, может быть все-таки попробовать олимпиаду самому решать, а не спрашивать решение каждой задачи на форуме? тем более, что не только вы одни там участвуете.
|
|
Черняев Саша (статус: Посетитель), 10 ноября 2009, 20:49 [#4]:
ну я понимаю, но два теста не проходит, а ошибку найти не могу...
|
|
Черняев Саша (статус: Посетитель), 10 ноября 2009, 21:41 [#5]:
program Project2;
{$APPTYPE CONSOLE}
var mas :array [1..100,1..100] of integer;
mas1 :array [1..100,1..100] of char;
m,n,j,i,itog :integer;
begin
assignfile (input,'f.in');
read(n,m);
itog:=0;
for j:=1 to 100 do
begin
for i:=1 to 100 do
mas[i,j]:=0;
end;
for j:=1 to m do
begin
for i:=1 to n do
begin
if (i=1) and (j=1) then mas[i,j]:=1;
if i=1 then
begin
if mas[i+1,j-1]=1 then mas [i,j]:=0
else mas[i,j]:=1;
end;
if j=1 then
begin
if mas[i-1,j+1]=1 then mas [i,j]:=0
else mas[i,j]:=1;
end;
if (j<>1) and (i<>1) then
begin
if (mas[i-1,j+1]=1) or (mas[i+1,j-1]=1) then mas[i,j]:=0
else mas[i,j]:=1;
end;
end;
end;
for j:=1 to m do
begin
for i:=1 to n do
if mas[i,j]=1 then itog:=itog+1;
end;
assignfile(output,'f.out'); rewrite(output);
for i:=1 to m do
begin
for j:=1 to n do
write(mas1[i,j]);
writeln;
end;
end
else
begin
writeln(itog);
for j:=1 to m do
begin
for i:=1 to n do
begin
if (mas[i,j])=1 then mas1[i,j]:='/';
if (mas[i,j])=0 then mas1[i,j]:='.';
end;
end;
for i:=1 to n do
begin
for j:=1 to m do
write(mas1[i,j]);
writeln;
end;
end;
end.
три теста не проходит
1) 5 на 5
2) 9 на 9
3) 9 на 11
|
|
Егор (статус: 10-ый класс), 10 ноября 2009, 22:00 [#6]:
надо не текст программы выкладывать, а основную идею писать
а вообще, да, согласен - олимпиаду решать надо самому. иначе какой в ней смысл?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Черняев Саша (статус: Посетитель), 10 ноября 2009, 22:05 [#7]:
ну идея в том, что я заполняю массив слэшами одного типа, и в первой матрице данные представляю в числовом виде; 1-слэш, 0-точка.
потом проверяю правильность расположения, и где возможно ставлю единицы, затем где единицы во второй матрицы ставлю слэши, где нули точки.
Заполнение происходит "уголком"
|
|
Черняев Саша (статус: Посетитель), 10 ноября 2009, 22:09 [#8]:
вообще-то я для галочки решаю, а то меня препод"повесит"а учителя "съедят". А моя цель в этом году на ЮФО поехать, в прошлом году немного не добрал до призового места на региональной олимпиаде.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|