Форум программистов, компьютерный форум, киберфорум
alhaos
Войти
Регистрация
Восстановить пароль
Рейтинг: 1.00. Голосов: 3.

ЗАДАЧА №16 Лесенка

Запись от alhaos размещена 30.11.2020 в 08:34

Красноярский краевой Дворец пионеров, (c)2006 - 2020

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

Входные данные
Во входном файле INPUT.TXT записано натуральное число N (1 ≤ N ≤ 100) – количество кубиков в лесенке.

Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести число лесенок, которые можно построить из N кубиков.

PowerShell
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
& {
    param(
      [String]$inputFileName,
      [String]$outputFileName
    )
   
    $i = 0
    [Int32]$Number = Get-Content inputFileName
    end {
      [Int32[]]$a = ,1 * $Number
      if ([Linq.Enumerable]::SequenceEqual($a, [Linq.Enumerable]::Distinct($a))) {$i++}
      while ($a.Length -gt 1) {
        $i, $j = ($a.Length - 1), $a[-1]
        $a = [ArraySegment[Int32]]::new($a, 0, $i)
        while (--$i -and $a[$i - 1] -eq $a[$i]) {
          $j += $a[-1]
          $a = [ArraySegment[Int32]]::new($a, 0, $i)
        }
        ++$a[$i]
        --$j
        $a = $a + (,1 * $j)
        if ([Linq.Enumerable]::SequenceEqual($a, [Linq.Enumerable]::Distinct($a))) {$i++}
    }
    }
    $i | Out-File $outputFileName
  } -inputFileName "INPUT.TXT" -outputFileName "OUTPUT.TXT"
Огромное спасибо пользователю greg zakharov за предоставленный алгоритм.
Размещено в Без категории
Просмотров 413 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.