Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/125: Рейтинг темы: голосов - 125, средняя оценка - 4.79
18 / 18 / 14
Регистрация: 27.11.2011
Сообщений: 51

Каждый робот живет 3 года после сборки. Сколько роботов будет через N лет?

29.11.2011, 21:55. Показов 25591. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сообщество роботов живет по следующим законам: один раз в год они объединяются а полностью укомплектованные группы по 3 или 5 роботов(причем число групп из 3-х роботов-максимально возможное). За год группа из 3-х роботов собирает 5 новых роботов, а группа из 5 роботов - 9 новых роботов.
Каждый робот живет 3 года после сборки. Известно начальное количество роботов(k>7, все они только что собраны). Определить сколько роботов будет через N лет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.11.2011, 21:55
Ответы с готовыми решениями:

Определить, через сколько лет будет погашена ссуда
Некто взял ссуду в банке величиной А руб. под В % годовых. Ежегодно заемщик вносит платежи в счет ссуды в С руб. Написать программу,...

Определить, через сколько лет будет погашена ссуда
1. Через прямоугольное окошко размером P*Q Винни -Пух выбросил круглый шарик радиусом R. Написать программу, определяющую, пройдет ли шарик...

Выведите на экран через сколько лет сумма будет В
Задача такова. "Процент по вкладам 15%. Первоначальный взнос А. Выведите на экран через сколько лет сумма будет В . А и В водится с...

26
24.07.2014, 15:03
Студворк — интернет-сервис помощи студентам

Не по теме:

И я ещё немного побуду на форуме, если что, пишите, пока я на работу не упылил...

0
 Аватар для CrazzyBeer
3 / 3 / 6
Регистрация: 24.03.2014
Сообщений: 65
24.07.2014, 15:05
Я пока другую буду решать. Жду ваших вариантов, если будет желание
0
Модератор
10471 / 5767 / 3410
Регистрация: 17.08.2012
Сообщений: 17,527
24.07.2014, 15:10

Не по теме:

Цитата Сообщение от CrazzyBeer Посмотреть сообщение
Вот
Ну да, всё по правилам. В принципе, я всё пояснил. Делается такая цензура для того, чтобы не было потери контента на сторонних ресурсах. Представьте, кто-нибудь в будущем попытается перейти по ссылке, а она уже битая, к примеру, сайт приказал долго жить. Правда, обидно будет кто-нибудю?



Добавлено через 2 минуты

Не по теме:

Задачка интересная. Ночером постараюсь с нею разобраться.

1
354 / 135 / 28
Регистрация: 16.12.2012
Сообщений: 607
Записей в блоге: 1
25.07.2014, 09:56
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var
    k, n, p, p1, p2, p3, i : LongInt;
 
begin
    Reset(input, 'input.txt');
    Rewrite(output, 'output.txt');
 
    ReadLn(k, n);
    p1 := k; p2 := 0; p3 := 0;
    for i := 1 to n-1 do begin
        p := (p1+p2+p3) div 5*9;
        if (p1+p2+p3) mod 5 = 3 then Inc(p, 5);
        if ((p1+p2+p3) mod 5 = 1) and (p1+p2+p3 > 1) then Inc(p);
        if (p1+p2+p3) mod 5 = 4 then begin
            if p1+p2+p3 > 4 then Inc(p,6)
            else Inc(p, 5)
        end;
        if ((p1+p2+p3) mod 5 = 2) and (p1+p2+p3 > 2) then
            if p1+p2+p3 > 10 then Inc(p, 2)
            else Inc(p, 1);
        p3 := p2; p2 := p1; p1 := p
    end;
    WriteLn(p1+p2+p3)
end.
1
Модератор
10471 / 5767 / 3410
Регистрация: 17.08.2012
Сообщений: 17,527
25.07.2014, 16:45
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var k, n, i, t, p: longint;
    a: array [0..2] of longint;
 
begin
  assign(input, 'input.txt'); reset(input);
  assign(output, 'output.txt'); rewrite(output);
  read(k, n);
  if k >= 3
    then begin
      a[0] := k; a[1] := 0; a[2] := 0;
      for i := 1 to n - 1 do
        begin
          if (k < 8) and (k <> 5)
            then begin
              t := k div 3;
              p := 0
            end
            else begin
              t := k mod 5 * 2 mod 5;
              p := k div 5 - t shr 1
            end;
          a[i mod 3] := 5 * t + 9 * p;
          k := a[0] + a[1] + a[2];
        end
    end
    else if n >= 4 then k := 0;
  write(k)
end.
1
 Аватар для CrazzyBeer
3 / 3 / 6
Регистрация: 24.03.2014
Сообщений: 65
20.08.2014, 18:10
Огромное спасибо, код рабочий. Осталось только понять. К месту было быть хоть чуть чуть объяснений метода
Миниатюры
Каждый робот живет 3 года после сборки. Сколько роботов будет через N лет?  
0
Модератор
10471 / 5767 / 3410
Регистрация: 17.08.2012
Сообщений: 17,527
22.08.2014, 15:51
Цитата Сообщение от CrazzyBeer Посмотреть сообщение
К месту было быть хоть чуть чуть объяснений метода
Ну, какой, к лешему, метод? Хотя, нет, метод таки есть. Нахождение закономерности.

Сначала заметим, что при большом количестве роботов, если они делятся и так и так, их лучше разбивать на пятёрки, допустим, 15 роботов: 3*9>5*5. Это хорошо, если они делятся на 15. А если остаётся остаток? Анализируем.

0: Это 5+5+...+5. Нечего переразбивать, всяко выпуск меньше будет.

1: 5+5+...+5+1. Если оставить последнего без дела, предпоследние выпустят 1*9. А если 5+1 заменить на 3+3, выпустят 2*5.

2: 5+5+...+5+5+2. Чтобы без дела механизмы не стояли, последних 12 предположим разбить по 3. Проверяем. 1*9+1*9=18, 1*9+2*5=19, 4*5=20. Предположение оправдалось.

3: Ясен день, всех по 5, а последних по 3.

4: 5+5+...5+4. 5+4 заменяем на 3+3+3, потому что 1*9+1*5<3*5.

5: Аналогично 0

6: Аналогично 1

... остаток от деления на 15 вычислять смысла нет, достаточно вычислить остаток от деления на 5.

С огромными количествами разобрались. А как с малыми? Да просто написать, что да как. Пишем.

Кол-воmod 5Разбиение
000x5+0x3
110x5+0x3
220x5+0x3
330x5+1x3
440x5+1x3
501x5+0x3
610x5+2x3
720x5+2x3
831x5+1x3
940x5+3x3
1002x5+0x3
1111x5+2x3
1220x5+4x3
1332x5+1x3
1441x5+3x3
1503x5+0x3
1612x5+2x3
1721x5+4x3
1833x5+1x3

Ну и... Что имеем с гуся? Пытаемся вывести выражение для количества.

Анализируем. Приходим к выводу, что, если количество не принадлежит множеству [1, 2, 4, 7], то вычисление групп производится так же, как и в случае с большим количеством роботов. Можно было бы написать
Pascal
1
if k in [1, 2, 4, 7] then ... else ...
, но я заметил ещё и следующее:

Если роботов k<8 и k≠5, то образуются группы только из 3 роботов, и количество этих групп k mod 3.

Теперь попытаемся написать аналитическое выражение для оставшихся количеств, то есть, для k=5 и k≥8.

Сначала, опираясь на остаток от деления на 5, вычисляем число групп по 3. Сначала я написал
Pascal
1
2
3
4
5
6
7
case k mod 5 of
  0: t := 0;
  1: t := 2;
  2: t := 4;
  3: t := 1;
  4: t := 3
end;
Но, приглядевшись к этой длинной конструкции, я понял, что, если вычислить остаток от деления на 5, умножить его на 2 и от этого дела вычислить снова остаток от деления на 5, числа будут те же самые. Действительно:

k mod 5 = 0; 0 * 2 = 0; 0 mod 5 = 0;
k mod 5 = 1; 1 * 2 = 2; 2 mod 5 = 2;
k mod 5 = 2; 2 * 2 = 4; 4 mod 5 = 4;
k mod 5 = 3; 3 * 2 = 6; 6 mod 5 = 1;
k mod 5 = 4; 4 * 2 = 8; 8 mod 5 = 3.


t = k mod 5 * 2 mod 5. Voila!

Ну, как бы я молодец, case громоздкое сократил. Да вот бедулька: Как быть с количеством групп по 5? Ну, как, как... Поделить их всех по 5, а затем вычесть что-то, опираясь на количество групп по 3, либо на остаток.

Сначала хотел так:
Pascal
1
2
3
t := k mod 5 * 2 mod 5;
k := k - t * 3;
p := k mod 5;
Но не понравилась мне последняя строка: там этих железяк ну так очень по 5, что аж зубы ломит. Попробовал отпереться от остатка, но ничего доброго не получилось: вышло длиннее окончательного варианта, хотя и короче, чем вышеприведённое:
Pascal
1
2
t := k mod 5 * 2 mod 5;
p := k mod 5 - k mod 5 div 3;
Но смутило меня масло масляное k mod 5. Попробовал опереться об уже вычисленное t. И заметил, что для данного диапазона чисел k mod 5 div 3 = t div 2. Для ускорения программы заменил деление нацело на 2 арифметическим сдвигом вправо. Результат тот же, скорость выше. Окончательно получилось
Pascal
1
2
t := k mod 5 * 2 mod 5 
p := k div 5 - t asr 1;
Ну ладно, далее цикл по годам, и всё такое... Но как определить, какие роботы от фирмы "Дохлер"? Понятно, по возрасту более 3 лет. Сначала думал сделать, как Ромаха, четыре переменные, и переприсваивать их каждый год по кругу, тем самым стариков отправляя на свалку, но вспомнил про стандартное решение с вычислением индекса массива как модуля от некоего числа. Получается, что элементов массива должно быть 3, под номерами 0, 1 и 2, и при надлежащем обращении к элементам массива только что вылупившиеся чугунины будут автоматически замещать отправленных на утилизацию дохлеров.

Всё. Далее просто пишем программу.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var k, n, i, t, p: longint;
    a: array [0..2] of longint;
 
begin
  assign(input, 'input.txt'); reset(input);
  assign(output, 'output.txt'); rewrite(output);
  read(k, n);
  a[0] := k; a[1] := 0; a[2] := 0; //старых k, молодых нет
  for i := 1 to n-1 do //цикл по годам
    begin
      if (k < 8) and (k <> 5) //если так,
        then begin //то
          t := k div 3; //только по 3
          p := 0 //по 5 нет
        end
        else begin //если иначе,
          t := k mod 5 * 2 mod 5; //по 3 в зависимости от остатка деления на 5
          p := k div 5 - t shr 1 //по 5... ну по 5, за вычетом количества групп, которые ушли на формирования групп по 3
        end;
      a[i mod 3] := 5 * t + 9 * p; //пишем юношей, стариков, если они там были, на свалку
      k := a[0] + a[1] + a[2]; //находим новое количество роботов
    end;
  write(k) //ну и... печатаем, сколько их там наклонировалось, если они не вымерли, конечно...
end.
Но меня смутило, что, если механизмов меньше 3, а срок большой, так эта программулина и будет в течение незнамо сколько лет 0 на 0 перемножать и с 0 складывать. Добавил условие k≥3 и n≥4 в угоду скорости выполнения, но проиграв в объёме программы... Не знаю... Зря, может быть... Попробуйте этот вариант, кто их поймёт, эти ацмп, что им надо для повышения оценки... Объём программы, быстродействие... По-моему, всё ж минимальный объём... Так что, может, я ошибся с добавлением условий...

Всего Вам доброго.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.08.2014, 15:51

Определить, через сколько лет на счету будет T рублей при заданных условиях
В банк положили на счет S рублей.Через сколько лет на счету будет T рублей,если 1)банк ежегодно начисляет на сумму вклада Z% 2)владелец...

Каждый робот живет 3 года после сборки. Сколько роботов будет через N лет?
Сообщество роботов живет по следующим законам: один раз в год они объединяются в полностью укомплектованные группы по 3 или 5 роботов...

Сообщество роботов. Сколько роботов будет через N лет
Надо решить эту задачу: Сообщество роботов живет по следующим законам: - один раз в начале года они объединяются в группы по 3 или 5...

Вычислить, сколько роботов будет через определенное количество лет
Есть определенное количество роботов (ввести с клавиатуры). В начале года они делятся на группы по 5 и по 3 работа. За год группа из 5...

Сколько роботов будет существовать через N дней
Бригада из 3 роботов собирает за 1 день еще 1 нового робота.Время жизни нового робота-5 дней,после окончания которых он погибает.Составьте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
По какой причине рабочий алгоритм может называться бредом?
Hrethgir 05.08.2026
3 мая мной была сделана публикация на Хабре авторского алгоритма итеративного обхода дерева "эстафета хвоста". Удаление публикации видимо произошло из-за отзывов об алгоритме такого рода Ну, я тебе. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru