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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2014, 08:01   #1
vadimmmm
Пользователь
 
Регистрация: 03.03.2014
Сообщений: 15
Восклицание Задача из e-olimp №8

Какое минимальное количество спичек необходимо для того, чтобы выложить на плоскости n квадратов со стороной в одну спичку? Спички нельзя ломать и класть друг на друга. Вершинами квадратов должны быть точки, где сходятся концы спичек, а сторонами – сами спички.

Напишите программу, которая по количеству квадратов n, которое необходимо составить, находит минимальное необходимое для этого количество спичек.


Технические условия
Входные данные

Одно целое число n (1 ≤ n ≤ 109).

Выходные данные

Вывести минимальное количество спичек, требуемых для составления n квадратов.
vadimmmm вне форума Ответить с цитированием
Старый 15.03.2014, 11:56   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

Экзамен что-ли? Так вы разделом опшиблись.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 15.03.2014, 15:50   #3
009
Пользователь
 
Регистрация: 09.02.2014
Сообщений: 33
По умолчанию

Код:
var n,i,col,j:longint;
begin
read(n);
if n<4 then begin
if n=1 then writeln(4);
if n=2 then writeln(7);
if n=3 then writeln(10);
end
else begin
i:=1; col:=4;
while (i+1)*(i+1)<=n do begin
col:=col+(2*(i+1))*2;
inc(i);
end;
n:=n-i*i;
if n>0 then begin
dec(n); col:=col+3;
end;
j:=1;
while (j<i) and (n>0) do begin    
dec(n); col:=col+2; inc(j);
end;
if n>0 then begin    
dec(n); col:=col+3;
end;
j:=1;
while (j<i) and (n>0) do begin
dec(n); col:=col+2; inc(j);
end;
writeln(col);
end;
end.
009 вне форума Ответить с цитированием
Старый 15.03.2014, 17:37   #4
kostan3
- Дорогой, а ты ку
Форумчанин
 
Регистрация: 06.10.2012
Сообщений: 184
По умолчанию

вот ещё вариант
Код:
var n, max, s, m, k, i, j:longint;
begin
     readln (n);
     if trunc(sqrt(n))<>sqrt(n) then 
     begin m:=trunc(sqrt(n))+1;
           s:=4+(m-2)*2*3+(m-2)*(m-2)*2;
     end
     else begin m:=trunc(sqrt(n));
     s:=4+(m-1)*3*2+(m-1)*(m-1)*2;
     writeln (s); halt;
     end;
     max:=n-(m-1)*(m-1);
     k:=1; s:=s+3;
     for i:=2 to m-1 do
     begin
          if k=max then begin writeln (s); halt; end;
          s:=s+2;
          inc(k);
     end;
     if k=max then begin writeln (s); halt; end;
     s:=s+3; inc(k);
     for i:=2 to m do
     begin
          if k=max then begin writeln (s); halt; end;
          s:=s+2;
          inc(k);
     end;
     writeln (s);
end.
kostan3 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на зачёт. проблема Задача на нобелевскую премию! Sabotage5 Паскаль, Turbo Pascal, PascalABC.NET 2 18.03.2013 15:18
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51