Задачка-головоломка

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Дикс, 28 Nov 2007.

  1. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Алгоритм решения задачи следующий. Доска - двумерный массив 8x8 байтов. Определяемся, например, так: 0 - клетка пуста, 1 - клетка занята слоном, 2 - клетка занята ладьей, 3 - клетка под боем слона, 4 - клетка под боем ладьи, 5 - клетка под боем обоих фигур. Далем две функции с входными параметрами - (доска, i, j), возвращающие также доску. Первая ставит на доску в клетку [i,j] слона а также забивает все клетки, в которые может срубить слон соотв. значениями (3, а если значение 2 - ладья бьет, то 5). Вторая делает то же самое, но для ладьи. Создается глобальная переменная, что-то вроде BestCount, в которую будет заноситься ответ. Теперь с рекурсией. Ее входные параметры: экземпляр доски, номер строки доски и count. В рекурсии идет цикл от 1 до 8 (идем по текущей строке доски). Если значение клетки = 0 (пусто) или 3 (под боем слона), то вызываем функцию вставки слона в эту клетку и вызываем рекрсию с параметрами: получившаяся доска, номер строки + 1, count + 1. Если значение клетки = 0 (пусто) или 2 (под боем ладьи), то вызываем функцию вставки ладьи в эту клетку и вызываем рекрсию с параметрами: получившаяся доска, номер строки + 1, count + 1. Вызов рекурсии происходит в цикле, без break'а. Если номер строки > 8 то если count > BestCount то BestCount := count и выход из рекурсии (это в самом начале функции).
     
  2. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    после сообщения о тупости задачи не ожидал более тупого ответа, принимая во внимание то, что решение я привел.
     
  3. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    ZaCo, я говорил о тупости условия задачи. А то, что решение ты привел, эт не значит что оно единственное
     
  4. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    ZaCo, перебор возможных комбинаций слонов и ладей можно реализовать в виде плагина к BruteNet ;)
     
  5. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2Joker-jar в смысле не единственное? ты привел, если и решение, то не той задачи. более того, твой алгоритм не решает даже проблемы связанной с твоим условием, не относящегося к этому топику.
     
  6. podkashey

    podkashey С крышкой по жизни!

    Joined:
    18 Jun 2005
    Messages:
    756
    Likes Received:
    351
    Reputations:
    353
    Какой тред нашел случайно... Прям в шоке..
    ИМХО
    X*******
    **yyyyyy
    *y*yyyyy
    *yy*yyyy
    *yyy*yyy
    *yyyy*yy
    *yyyyy*y
    *yyyyyy*
    Никто никого не бьет из друг друга, хотя бы по одному есть, кто есть кто насрать. Если нельзя чтобы вообще никто никого бил, то 8 на непересекающихся линиях. Хз че такая полемика... гы. Как запрограммировать незнаю - в фотошопе или пеинте ИМХО.
    П.С. Ответ-то есть какой-нибудь уже?
     
    1 person likes this.
  7. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    podkashey, ты всмысле пытался нарисовать *** буквами "ХУЙ", или это реально решение...? )))))
     
  8. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    в двух постах этой темы же написал, что тогда смысл у задачи теряется, точнее программистский. чем вам моя реализация-то (выводит даже !позиции! слонов и ладей) не нравится?:) хотя тут интересен исключительно момент оптимизации алгоритма..
     
  9. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    От балды или фонаря наваял.... вдруг кто то посмотрит
     
    #29 Delimiter, 7 Jan 2008
    Last edited: 7 Jan 2008
  10. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    а если перед return rm вставить
    // -------------- kusok dlia togo chtob glianut chto tam za rezultaty
    if(rm==cnt)
    {
    if(cnt==14)
    {
    //vivod v file rezultatov predvaritelno poluchiv 14 kak rezultat
    if(f.Open("c:\\rez.txt",CFile::modeWrite,(CFileException *)&e))
    {
    f.SeekToEnd();
    for(i=0;i<8;i++)
    {
    f.Write("*---*---*---*---*---*---*---*---*\r\n|",36);

    for(j=0;j<8;j++)
    {
    f.Write(" ",1);
    if(A[j]>40)
    {
    f.Write((char *)&(A[j]),1);
    }
    else
    {
    f.Write(" ",1);
    }
    f.Write(" |",2);
    }
    f.Write("\r\n",2);
    }
    f.Write("*---*---*---*---*---*---*---*---*\r\n",35);
    f.Close();
    }
    }
    }

    то все 14-ти значные результаты вывалятся в файл