Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2007, 00:06   #1
Gavrik2007
Новичок
Джуниор
 
Регистрация: 28.11.2007
Сообщений: 1
По умолчанию Интересные задачи

Помогите мне Пожайлуста с двумя заданиями ОНИ ОЧЕНЬ ИНТЕРЕСНЫ ДУМАЮ ЧТО
ОНИ ВАС ЗАИНТЕРЕСУЮТ Поскольку фермеры Диетенко и Вампиров постоянно
заботятся своими кроликами, то свободного времени у них хватает лишь на
игру в мини-шахи. Доска для игры в мини-шахи стандартная: столбцы
нумеруются большими латинскими буквами от ‘A’ к ‘H’, строки - цифрами от
1 до 8; нумерация начинается с нижнего левого угла. Отличия от обычных
шахмат: а) фигур гораздо меньше (король и две пешки одного цвета и слон
другого); бы) пешки могут стоять и в крайних строках. Помогите
постоянно занятым фермерам быстро определить, скольким фигурам угрожает
слон. Входные данные: в первой строке текстового файла chess.in
записаны два символа - буква строки и номер столбца, на пересечении
которых находится слон, в следующих трех строках, по 2 символа в каждом
- координаты короля и двух пешек соответственно. Выходные даны: в
первую строку текстового файла chess.out вывести одно число - количество
фигур, которым угрожает слон.
Входные данные: в первой строке текстового файла chess.in записаны два
символа - буква строки и номер столбца, на пересечении которых находится
слон, в следующих трех строках, по 2 символа в каждом - координаты
короля и двух пешек соответственно. Выходные даны: в первую строку
текстового файла chess.out вывести одно число - количество фигур,
которым угрожает слон, или NO, если слон не угрожает ни одной фигуре.
Пример файла chess.in: C3 A1 D2 D3 Пример файла chess.out: 2
Или
Или Деть фермеров занялись программированием и решили написать
программу-игру "Stack Attack (remix)". Игровое поле Stack Attack являет
собой таблицу 6*8 (6 строк, 8 столбцов). В каждом амбарчике можно
разместить квадратик один из четырех цветов: зеленый, синий, красный,
желтый. Полностью заполненная квадратиками строка записывается в
протокол и исчезает из игрового поля, после чего верхние строки (если
есть) опускаются на одну строку вниз. Игра прекращается, когда в одном
из столбцов игрового поля накапливается 6 квадратиков. По окончании игры
все 6 строк игрового поля также заносятся в протокол. За каждую
полностью заполненную строку насчитывается 100 баллов, за каждые три
квадратики одного цвета кряду в заполненной строке насчитывается
дополнительный бонус в размере 23 баллов (при этом каждый квадратик
можно считать лишь один раз). Помогите детям фермеров за данным
протоколом игры определить, сколько баллов набрал игрок.
Входные данные: в каждой строке текстового файла protokol.txt записано 8
чисел через пропуск: 1 - помечает зеленый квадратик, 2 - синей, 3 -
красный, 4 - желтый, 0 - пустой амбарчик. Выходные даны: в первую
строку файла result.txt вывести единственное число - количество баллов,
набранных игроком.
Примечание: в приведенном примере игрок полностью заполнил одну строку,
после чего проиграл (6 квадратиков накопилось в 3-ом столбце)
Gavrik2007 вне форума Ответить с цитированием
Старый 29.11.2007, 08:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

По первой задаче проверка на бой слоном мона сделать так:

Поясняю: в переменные S и P забиваются клеточки:
S - Позиция слона например 'c4'
p - Позиция пешки
Буквы в позиции должны указываться в нижнем шрифте.

Код:
uses crt;
var s,p:string;i,k:integer;
begin    clrscr;
s:='b3'; p:='d1';
i:=(ord(s[1])-ord('a'))-(ord(p[1])-ord('a'));
k:=(ord(s[2])-ord('1'))-(ord(p[2])-ord('1'));
if abs(k)=abs(i) then writeln('Ugroza') else writeln('nea');
end.
Я думаю ты с легкостью присвособиш этот код для проверки в цикле по твоему файлу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.11.2007, 09:08   #3
Cantana
форвард
Форумчанин
 
Аватар для Cantana
 
Регистрация: 03.08.2007
Сообщений: 130
По умолчанию

это задачка для подготовки к олимпиаде ?
dela ne v dengax a v yego kolichestve
Cantana вне форума Ответить с цитированием
Старый 04.12.2007, 22:50   #4
KLeX
Пользователь
 
Регистрация: 02.12.2007
Сообщений: 13
По умолчанию 8 ферзей

В продолжение темы о интересных задачах:

1. Дана шахматная доска (8 на 8). Нужно расставить 8 ферзей на доске так, чтобы они не били друг друга. И вообще, возможна ли такая ситуация?. ))
KLeX вне форума Ответить с цитированием
Старый 05.12.2007, 06:21   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Поищи в интернете, в разных учебниках эта задача рассмотрена со всех сторон и не только для доски 8х8. В частности для доски 8х8 она имеет точно не помню, но более 90 решений, учитывая повороты и зеркальные отображения доски.
puporev вне форума Ответить с цитированием
Старый 05.12.2007, 07:08   #6
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Решение на С:
Код:
int col[8], up_free[15], dn_free[15], coln[8] ;

main( )
{            
    int i ;

	  for ( i = 0 ; i <= 7 ; i++ )
    col[i] = 1 ;
     for ( i = 0 ; i <= 14 ; i++ )
    up_free[i] = dn_free[i] = 1 ;
    clrscr( ) ;
    addqueen( ) ;  
}            

 addqueen( )            
{            
    int i, c, r ;            
    static int comb, row = -1 ;
	  
    row++ ;

     /* Проверяем колонки */            
    for ( i = 0 ; i <= 7 ; i++ )            
    {            
        /* если клетка не находится под ударом */            
        if ( col[i] && up_free[i+row] && dn_free[row-i+7])
        {            
			  /* запоминаем, что в строке находится ферзь */
	          coln[row] = i ;

	           /* маркируем колонку и диагональ */ 
	          col[i] = 0 ;             
	          up_free[i+row] = 0 ;             
	          dn_free[row-i+7] = 0 ;

	           /* если заполнены все строки */            
	          if ( row >= 7 )            
	          {            
		          comb++ ;            
		          printf ( "\n\n\ncombination no. %d", comb ) ;
		          for ( r = 0 ; r <= 7 ; r++ )
		          {            
			          printf ( "\n" ) ;            
			          for ( c = 0 ; c <= 7 ; c++ )
			          {            
				          if ( c == coln[r] )            
					          printf ( " Q " ) ;
				          else            
					          printf ( " . " ) ;
			          }            
	        	  }            
	          }            
		      else            
  			  addqueen( ) ;

	           /* снимаем пометку с колонки и диагонали */            
		      col[ coln[row] ] = 1 ;            
  		  up_free[ row + coln[row] ] = 1 ;            
	          dn_free[ row - coln[ row ] + 7 ] = 1 ;            
	      }            
	  }            
    row-- ; /* уменьшаем счетчик строк, пробуем следующую комбинацию */
}
zetrix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
интересные проги kipish Софт 85 18.12.2022 01:03
Просто интересные задачки bag Общие вопросы C/C++ 11 18.09.2008 22:13
Интересные домены zetrix Свободное общение 12 08.08.2008 12:08