Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с решением задачи 
V
    Опции темы
mamed05
Дата 15.3.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.3.2009

Репутация: нет
Всего: нет



Условие задачи:
Сегодня Вася узнал историю о вавилонской башне. Вавилонцы решили построить башню, которая бы достала до неба. Но у них ничего не вышло. Вася предполагает, что это случилось из-за неправильной проектной документации. Вася решил предложить свой проект башни. Она будет расширяться кверху и иметь бесконечное число этажей и комнат. Устроена она следующим образом – на первом этаже одна комната, затем идет два этажа на каждом из которых по две комнаты, затем идет три этажа на каждом из который по три комнаты и так далее. Вася предлагает Пете сыграть в следующую игру. По номеру комнаты N (0 < N < 2000000000) определить номер этажа и порядковый номер комнаты на этаже (считая слева).

......
51 52 53 54 55
46 47 48 49 50
41 42 43 44 45
36 37 38 39 40
31 32 33 34 35
27 28 29 30
23 24 25 26
19 20 21 22
15 16 17 18
12 13 14
9 10 11
6 7 8
4 5
2 3
1

Входные данные: число N.
Выходные данные: два целых числа – номер этажа и порядковый номер комнаты на этаже.

Пример входных данных №1:
5
Пример выходных данных №1:
3 2
Пример входных данных №2:
25
Пример выходных данных №2:
9 3 


Ограничение в выполнении задачи: Время выполнения не более: 0.5 с

ПРОБЛЕМА ЗАКЛЮЧАЕТСЯ В СЛЕДУЮЩЕМ
Я решил эту задачу на Pascal, но вот время выполнения программы превышает требуемое (625 мс, а должно быть не более 500мс)
Как можно изменить программу чтоб уложиться во времени?


Код

Program Zadacha;
Label 5, 10;

Var
    n, x,x2,x3,x4,a,b,i:longint; {a - etaj, b - komnata}
begin
   read (n);
   repeat
    x:=x+1;
    a:=a+x;
    x2:=x2+sqr(x);
   until n <= (x2+sqr(x)+a);
   x:=x+1;
   x3:=x2;
5: x4:=x3+x;
   a:=a+1;
   b:=0;
   for i:= (x3+1) to x4 do
      begin
      b:=b+1;
      if i=n then  goto 10;
      end;

   x3:=x4;
   goto 5;
10:write (a,' ',b);
end.



PM MAIL   Вверх
mamed05
  Дата 16.3.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.3.2009

Репутация: нет
Всего: нет



ну подскажите пожалуйста как можно упростить алгоритм!  smile
PM MAIL   Вверх
volvo877
Дата 16.3.2009, 15:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(mamed05 @  16.3.2009,  11:38 Найти цитируемый пост)
как можно упростить алгоритм!

Ты сначала его правильным сделай... При вводе N = 5, программа зацикливается.

А вообще, задача решается так:
Код
var
  n: longint;
  e, et: longint;
  before: longint;
begin
  readln(n);
  e := 0;
  repeat
    inc(e);
    inc(before, e);
    dec(n, sqr(e));
  until n <= 0;
  inc(n, sqr(e));
  dec(before, e);

  et := pred(n) div e;
  dec(n, et * e);

  writeln(before + et + 1, ' ', n);
end.


Это сообщение отредактировал(а) volvo877 - 16.3.2009, 15:49
PM MAIL   Вверх
mamed05
Дата 19.3.2009, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.3.2009

Репутация: нет
Всего: нет



Спасибо! Действительно не правильный алгоритм. И многое усложнено. Учту в будущем! smile  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0425 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.