Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
2 / 2 / 2
Регистрация: 02.12.2013
Сообщений: 175

Программа, определяющая, сколько живых растений будет в N-ом году

10.03.2015, 09:38. Показов 2682. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Время жизни растения составляет 20 лет. В первый год плод растения попадает в землю. Первые побеги растения появляются лишь на 2 год. Плодоносить растение начинает с четвертого года и ежегодно дает по одному плоду, которые сразу попадают в землю, и из них вырастают такие же растения. На 20-ый год своей жизни растение плодоносит в последний раз, а на 21-ый год погибает.
программа, которая определяет, сколько живых растений будет в N-ом году, если в первый год мы посадим только один плод этого растения. Только что посаженные плоды за растения не считаются. Также не считаются живыми растениями, для которых данный год является 21-ым (или больше) годом жизни.
Входные данные:
Число N, которое меньше 100.
Выходные данные:
Количество живых растений в N-ом году.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2015, 09:38
Ответы с готовыми решениями:

Определение живых растений =)
Из описания некоего растения: "... его время жизни составляет 20лет. В первый год плод растения попадает вземлю. Первые побеги растения...

Программа определяющая, какой день будет через n дней
Необходимо написать Программу определяющая, какой день будет через n дней. Не нужно учитывать високосный год.

Сколько будет хостов в Интернете в 2010 году?
Помогите плиз,правильное ли решение...есть задача: Интернет удваивается в размерах примерно каждые 18 месяцев. Точное число хостов...

4
41 / 41 / 26
Регистрация: 24.02.2015
Сообщений: 151
10.03.2015, 10:31
Можно ссылку на тесты?
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,008
10.03.2015, 15:52
Как-то так (если нигде в алгоритме не ошибся):
C++
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
29
30
31
32
const life_time = 20;
//---------------------------------------------------------------------------
struct plant
{
  unsigned int age;
  unsigned __int64 number;
};
//---------------------------------------------------------------------------
unsigned __int64 plant_count (unsigned int N)
{
  const n = 100;
  plant plants[32767] = {0, 0};
  unsigned __int64 count = 1, plantcount = 0;
  for (unsigned int i = 1; i <= N; i++)
    for (unsigned __int64 j = 1; j <= count; j++)
    {
      plants[j-1].age++;
      if (!plants[j-1].number)
        plants[j-1].number = count;
 
      if (plants[j-1].age > 3 && plants[j-1].age <= life_time)
      {
        count++;
        plants[count-1].age = 0;
        plants[count-1].number = count;
      }
    }
  for (unsigned __int64 i = 0; i < count; i++)
    if (plants[i].age > 1 && plants[i].age <= life_time)
      plantcount++;
  return plantcount;
}
Для нового растения прибавление возраста сделал при следующей итерации (на результат вроде не влияет).
Начиная с N = 30 уже считает неправильно (переполнение). Для N = 29 имеем в результате кол-во растений 18497.
Можно оптимизировать - растения с возрастом более 20 лет убирать, сдвигая элементы массива, но сильно ли удастся в этом случае выиграть - хз, надо проверять.
0
2 / 2 / 2
Регистрация: 02.12.2013
Сообщений: 175
10.03.2015, 20:23  [ТС]
gunslinger, спасибо большое, а можно вместе с шапкой? а то я что-то в библиотеках запуталась...
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
11.03.2015, 02:06
А у меня получилось как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
typedef unsigned long long int ull;
void init(ull *p, int n) { if (n) {p[n] = 0; init(p, n-1);} else p[n] = 1; }
void step(ull *p, int n, ull a) {if (n) {p[n]=p[n-1]; step(p, n-1, a+p[n]*(n>3));} else p[n]=a;}
void go (ull *p, int n) { if (n) {step(p, 19, 0); go (p, n-1);} }
ull sum(ull *p, int n) { return (n) ? p[n] + sum(p, n-1) : 0; }
 
int _tmain(int argc, _TCHAR* argv[]) {
    setlocale(LC_ALL,"Rus");
    ull t[20]; int n; cout << "Введите N: "; cin >> n;
    init(t, 19); go(t, n-1); cout << "Результат: " << sum(t, 19) << endl;
    system("pause"); return 0;
}
С результатом gunslinger не совпадает, совпадет если заменить (n>3) на (n>2) - то есть, если считать что растение начинает плодоносить с третьего года, а не с четвертого, как сказано в условии. Ну и до переполнения далеко не то что при n=30, и а и при бОльших значениях n. Алгоритм тривиален и прост, но из любви к искусству как всегда реализовал его без единого гвоздя цикла

UPD возможно, вот так будет правильнее - сначала плодоносить а потом умирать
C++
1
void step(ull *p, int n, ull a) {if (n) {a+=p[n]*(n>3); p[n]=p[n-1]; step(p, n-1, a);} else p[n]=a;}
Но в таком случае результат тем более не совпадает с другим котом. Была бы хоть парочка правильных ответов, на которые можно было ориентироваться...

Если при сроке жизни растений в 10 лет (для краткости данных) такая таблица количества растений по возрастам в зависимости от года верна
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
11   0   0   |   0   0   0   0   0   0   0   
20   1   0   |   0   0   0   0   0   0   0   
30   0   1   |   0   0   0   0   0   0   0   
40   0   0   |   1   0   0   0   0   0   0   
51   0   0   |   0   1   0   0   0   0   0   
61   1   0   |   0   0   1   0   0   0   0   
71   1   1   |   0   0   0   1   0   0   0   
81   1   1   |   1   0   0   0   1   0   0   
92   1   1   |   1   1   0   0   0   1   0   
10: 3   2   1   |   1   1   1   0   0   0   1   
11: 4   3   2   |   1   1   1   1   0   0   0   
12: 4   4   3   |   2   1   1   1   1   0   0   
13: 6   4   4   |   3   2   1   1   1   1   0   
14: 9   6   4   |   4   3   2   1   1   1   1   
15: 13  9   6   |   4   4   3   2   1   1   1   
16: 16  13  9   |   6   4   4   3   2   1   1   
17: 21  16  13  |   9   6   4   4   3   2   1   
18: 29  21  16  |   13  9   6   4   4   3   2
, то вот так будет правильно
C++
1
void step(ull *p, int n, ull a) {if (n) {a+=p[n]*(n>=3); p[n]=p[n-1]; step(p, n-1, a);} else p[n]=a;}
- я в прошлый раз упустил из виду, что у меня растения четвертого года жизни находятся в третьем элементе массива.

Ну и как же без однострочника
Haskell
1
res n = sum.tail.(!!(n-1)).iterate (\l -> sum (drop 3 l):init l) $ 1:replicate 19 0
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2015, 02:06
Помогаю со студенческими работами здесь

Сколько будет хостов в Интернете в 2010 году?
Интернет удваивается в размерах приблизительно каждые 18 месяцев. Точное число хостов неизвестно, но один аналитик в 2001 году назвал цифру...

Программа определяющая сколько раз встречается заданное число
Программа определяющая сколько раз встречается заданное число (вводиться с клавиатуры) в диапазоне от 10 до 352

Программа, определяющая за сколько ходов конь переместиться в указанные координаты
Вводятся начальные и конечные координаты положения шахматного коня (x1, y1, x2, y2), написать программу, определяющую за сколько ходов ...

Программа, определяющая сколько точек лежит внутри окружности с заданными параметрами
Доброго времени суток. Пытаюсь решить задачку. Нужна программа, определяющая, сколько точек с целочисленными координатами лежат в...

По введенному году определить число ноября, на которое будет приходиться День матери в этом году
Подскажите алгоритм по которому можно выполнить эту задачу.Пробовал много способов , но ничего не получается. Алиса отправляясь на...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru