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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2008, 21:28   #1
Witaliy
Форумчанин Подтвердите свой е-майл
 
Регистрация: 27.04.2008
Сообщений: 179
По умолчанию Задача "Спираль"

Помогите решить задачу :

Задача . Спираль.
Известно, что квадратная таблица(N на N) заполнена натуральными числами по спирали, например, для N = 5:
1 2 3 4 5
1 1 2 3 4 5
2 16 17 18 19 6
3 15 24 25 20 7
4 14 23 22 21 8
5 13 12 11 10 9

Найти число, которое будет находиться в данной таблице на пересечении i той строки и j-того столбца.


Входные данные: В первой строке входного файла содержится три целых числа: N<30000 – размер квадратной таблицы, i – номер строки, j –номер столбца, на пересечении которых расположенное искомое число.
Исходные данные: входной файл содержит единственное число – ячейка таблицы, которых находится на пересечении і-го строки и j-го столбца.
Пример входных данных:
5 2 3
Пример исходных данных:
18

Спасибо всем кто решит !!!
www.programmer.uaforums.net - Український форум програмістів.

www.satellite.ipsys.net - Український форум супутникового телебачення.
Witaliy вне форума Ответить с цитированием
Старый 28.04.2008, 22:20   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Виталий, идеи есть ?
Может подумаете ? Задачка то не сложная.
alexBlack вне форума Ответить с цитированием
Старый 29.04.2008, 20:42   #3
KIBO
Новичок
Джуниор
 
Регистрация: 01.01.2008
Сообщений: 1
По умолчанию

Напиши свой вариант решения данной задачи! А как-то доработать я думаю мы тебе поможем!
KIBO вне форума Ответить с цитированием
Старый 01.05.2008, 10:51   #4
Witaliy
Форумчанин Подтвердите свой е-майл
 
Регистрация: 27.04.2008
Сообщений: 179
По умолчанию

Понятия не имею...
www.programmer.uaforums.net - Український форум програмістів.

www.satellite.ipsys.net - Український форум супутникового телебачення.
Witaliy вне форума Ответить с цитированием
Старый 01.05.2008, 11:33   #5
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Жаль, Виталий.
А как же удовлетворение от полученного решения. Кроме того сам процесс решения даст Вам новые методы, подходы к решению. Если мы напишем готовое решение, мы лишим Вас всего этого.
У Вас еще есть шанс.

Неужели никаких вариантов ? А как бы Вы решали это на бумажке, если начать с того, что матрица еще не нарисована, а есть только ее размер ?
alexBlack вне форума Ответить с цитированием
Старый 01.05.2008, 12:51   #6
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию

Кому интересно выкладываю исходник заполнения таблицы по спирали.
Исходник НА С!
Код:
#include <cstdlib>
#include <stdio.h>
#include <conio.h>
int main()
{
  printf("Vvedite rasmer");
  int n;
  scanf("%d",&n);
  int **m=new int*[n];
  int i,k,j;
  int u=0;
  for (i=0;i<n;i++)

    m[i]=new int[n];

  for (j=0,k=n-1;j<k;j++,k--)
  {
    for (i=j;i<k;i++)
      m[j][i]=++u;
    for (i=j;i<k;i++)
      m[i][k]=++u;
    for (i=k;i>j;i--)
      m[k][i]=++u;
    for (i=k;i>j;i--)
      m[i][j]=++u;
  }
  if(n%2==1) m[j][j]=++u;
  for (i=0;i<n;i++)
  {
    for (j=0;j<n;j++)
      printf("%3d",m[i][j]);
    printf("\n");
  }
getch();
}
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Старый 01.05.2008, 21:09   #7
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Поиск числа в матрице, заполненной по спирали:

Код:

// N := 5;           // Размерность матрицы
// X := 4; Y := 3;   // Координаты ячейки, в которой нужно найти число
//                   // обе <= N
function getNumberInMatrix(N, X, Y:integer):integer;
var C0, k, k1, c, d, i, j:integer;
begin
   C0 := 0;
   k := N;
   k1 := k;
   c := 1;
   d := 1;           // направление перемещения
   i := 1; j := 0;   // начальные координаты вне матрицы
   repeat
      // Перемещаем указатель на следующую позицию
      case d of
         1 : inc(j);
         2 : inc(i);
         3 : dec(j);
         4 : dec(i);
      end;
      inc(C0);   // очередное число в матрице
      dec(k1);
      if k1 = 0 then begin
         // В эту сторону больше перемещаться нельзя
         dec(c);
         if c = 0 then begin
            dec(k);
            c := 2;
         end;
         k1 := k;
         // Меняем направление перемещения
         inc(d);
         if d > 4 then d := 1;
      end;
   until ((j = x) and (i = y));
   // C0 содержит число в матрице A[Y, X]
   result := C0;
end;

// Тестирование:
procedure test(N, X, Y:integer);
var A:array [1..100, 1..100] of integer;
    C, i, j:integer;
    S:String;
begin
   C := getNumberInMatrix(N, X, Y);

   // Для проверки строим саму матрицу
   if N <= 100 then begin
      S := '';
      for i:=1 to N do begin
         for j:=1 to N do begin
           A[i, j] := getNumberInMatrix(N, j, i);
           S := S + IntToStr(A[i, j])+ ' ';
         end;
         S := S + #13#10;
      end;
      if C = A[Y, X]
      then S := S + 'ok'
      else S := S + 'not passed';
      S := S + #13#10 + intToStr(X) + ' ' + IntToStr(Y) + ' = ' + intToStr(C);
      form1.Memo1.text := S;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   test(5, 2, 3);
   test(7, 5, 5);
   test(30000, 28000, 27000);
end;
alexBlack вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
"Транспортная задача", "Поиск решения" Perroman Microsoft Office Excel 3 12.12.2007 17:12
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49