Головна Обговорення Лінки Пошук Prykladna СС Прикладна _КОЛЕДЖ 13.08.2026 04:19:55 (EEST=GMT+2)
ACM -
Навігація -
Теми форуму +
Чи знали ви, що... ? (beta) -
UA - це не тільки zip-code України, але й місто у Американсьому штаті Огайо.
Події
ПнВтСрЧтПтСбНд
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

Birthday(s):
AVATARgenerak13
AVATARKsvirik
AVATARIvanKu
AVATARhomemasters

Перегляд теми
ACM Контестер | ACM College | Задачі
Автор Як порахувати кількість всеможливих комбінацій одно- і двопалубних кораблів для комірки (елемента ма
someone
Користувач

Повідомлень: 2
Зареєстрований: 03.06.11
Опубліковано 03-06-2011 09:55
Є масив 4х4
Треба порахувати кількість всеможливих комбінацій одно- і двопалубних кораблів які можуть на ній існувати

P.S: Для даного масиву я порахував вручну:

але мені потрібен алгоритм, адже якихось клітинок може не існувати


Дякую!
Надіслати приватне повідомлення
Автор RE: Як порахувати кількість всеможливих комбінацій одно- і двопалубних кораблів для комірки (елемент
Anastasko
Користувач

Аватар користувача

Повідомлень: 33
Звідки: ЛНУ ім. Івана Франка
Зареєстрований: 06.02.11
Опубліковано 03-06-2011 11:51
А що означають цифри в клітинках на тому малюнку?


Feel Good
Anastasko [Lviv NU] Надіслати приватне повідомлення
Автор RE: Як порахувати кількість всеможливих комбінацій одно- і двопалубних кораблів для комірки (елемент
cupidon4uk
Користувач

Повідомлень: 393
Звідки: LNU
Зареєстрований: 02.01.09
Опубліковано 03-06-2011 14:28
Я так зрозумів, що в клітинці число - кількість способів "заповнити" клітинку, тобто 3 - коли ми можемо покласти 2-ох палубний вертикально(це вже 1) + горизонтально(+1) і просто одиничний(+1). І того - 3. А 5 - можемо вертикально покласти 2-ма способами, і горизонтально.

Але щодо завдання. Я не дуже розумію самого питання?
І... Ті складні обрахунки, які ти зробив ( про малюнок ) здається, тобі ніяк не допоможуть, бо та табличка завжди матиме вигляд :
3 4 4 4 .... 4 4 4 3
4 5 5 5 .... 5 5 5 4
4 5 5 5 .... 5 5 5 4
. . . . .... . . . . .
. . . . .... . . . . .
. . . . .... . . . . .
4 5 5 5 .... 5 5 5 4
4 5 5 5 .... 5 5 5 4
3 4 4 4 .... 4 4 4 3


GoogleHireMe 557679737 mylyanyk.ivan [Lviv_NU] Надіслати приватне повідомлення
Автор RE: Як порахувати кількість всеможливих комбінацій одно- і двопалубних кораблів для комірки (елемент
someone
Користувач

Повідомлень: 2
Зареєстрований: 03.06.11
Опубліковано 03-06-2011 15:55
CUPIDON - так, ти зрозумів правильно.
Я трохи спростив - навправді я роблю поле 10х10 і там будуть всі кораблі до чотирьохпалубних (а то трохи є мороки)...
Ось так виглядає початковий масив всеможливих варіантів для нього:

а оскільки якихось клітинок може не існувати, то треба алгоритм... ось такий я написав:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
sprava=0;
zliva=0;
nuz=0;
verx=0;
syma_vsix=syma_vsix1;
syma_vsix1=0;

for (i=0;i<10;i++)
for (j=0;j<10;j++)
{
if (StringGrid3->Cells[i][j]!="X"&&StringGrid3->Cells[i][j]!=0)
{
StringGrid3->Cells[i][j]=1;
if (i>=1)
if (StringGrid3->Cells[i-1][j]!="X"&&StringGrid3->Cells[i-1][j]!=0)
{
zliva++;
if (i>=2)
if (StringGrid3->Cells[i-2][j]!="X"&&StringGrid3->Cells[i-2][j]!=0)
{
zliva++;
if (i>=3)
if (StringGrid3->Cells[i-3][j]!="X"&&StringGrid3->Cells[i-3][j]!=0)
zliva++;
}
}

if (i<=8)
if (StringGrid3->Cells[i+1][j]!="X"&&StringGrid3->Cells[i+1][j]!=0)
{
sprava++;
if (i<=7)
if (StringGrid3->Cells[i+2][j]!="X"&&StringGrid3->Cells[i+2][j]!=0)
{
sprava++;
if (i<=6)
if (StringGrid3->Cells[i+3][j]!="X"&&StringGrid3->Cells[i+3][j]!=0)
sprava++;
}
}

if (j>=1)
if (StringGrid3->Cells[i][j-1]!="X"&&StringGrid3->Cells[i][j-1]!=0)
{
verx++;
if (j>=2)
if (StringGrid3->Cells[i][j-2]!="X"&&StringGrid3->Cells[i][j-2]!=0)
{
verx++;
if (j>=3)
if (StringGrid3->Cells[i][j-3]!="X"&&StringGrid3->Cells[i][j-3]!=0)
verx++;
}
}

if (j<=8)
if (StringGrid3->Cells[i][j+1]!="X"&&StringGrid3->Cells[i][j+1]!=0)
{
nuz++;
if (j<=7)
if (StringGrid3->Cells[i][j+2]!="X"&&StringGrid3->Cells[i][j+2]!=0)
{
nuz++;
if (j<=6)
if (StringGrid3->Cells[i][j+3]!="X"&&StringGrid3->Cells[i][j+3]!=0)
nuz++;
}
}
}

switch (nuz+verx)
{
case 6: StringGrid3->Cells[i][j]=StrToInt(StringGrid3->Cells[i][j])+9; break;
case 5: StringGrid3->Cells[i][j]=StrToInt(StringGrid3->Cells[i][j])+8; break;
case 4: StringGrid3->Cells[i][j]=StrToInt(StringGrid3->Cells[i][j])+6; break;
case 3: StringGrid3->Cells[i][j]=StrToInt(StringGrid3->Cells[i][j])+3; break;
case 2: StringGrid3->Cells[i][j]=StrToInt(StringGrid3->Cells[i][j])+2; break;
case 1: StringGrid3->Cells[i][j]=StrToInt(StringGrid3->Cells[i][j])+2; break;
}

switch (sprava+zliva)
{
case 6: StringGrid3->Cells[i][j]=StrToInt(StringGrid3->Cells[i][j])+9; break;
case 5: StringGrid3->Cells[i][j]=StrToInt(StringGrid3->Cells[i][j])+8; break;
case 4: StringGrid3->Cells[i][j]=StrToInt(StringGrid3->Cells[i][j])+6; break;
case 3: StringGrid3->Cells[i][j]=StrToInt(StringGrid3->Cells[i][j])+3; break;
case 2: StringGrid3->Cells[i][j]=StrToInt(StringGrid3->Cells[i][j])+2; break;
case 1: StringGrid3->Cells[i][j]=StrToInt(StringGrid3->Cells[i][j])+1; break;
}
syma_vsix1+=StrToInt(StringGrid3->Cells[i][j]);

a[i][j]=ceil((2000*StrToInt(StringGrid3->Cells[i][j]))/syma_vsix);
StringGrid3->Cells[i][j]=IntToStr(a[i][j]);
sprava=0;
zliva=0;
nuz=0;
verx=0;
}
}




Тож питання вичерпане і тему можна закривати.
Дякую небайдужим!
Змінив(ла) someone, 03-06-2011 15:55
Надіслати приватне повідомлення
Перейти на форум:
Голосування
Що Ви б хотіли отримати в якості подарунку на змаганні з програмування?

Медалі

настільні ігри

торт

клавіатура, навушники, флешки і т.д.

квитки в кіно

квитки в аквапарк

квитки на пейнтбол

книги

футболки з логотипом змагання

Для участі в голосуваннях Ви повинні залогуватись.
Міні-чат +
Зараз на сайті -
Гостей: 3
На сайті немає зареєстрованних користувачів

Користувачів: 5,103
новачок: NataEvgten
Powered by PHP-Fusion © 2003-2006
LNU ACMania © 2004-2011 e-mail: webmaster@acm.lviv.ua
26,098,512 унікальних відвідувачів
Our projects: ACM Contester, _College.