Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
13 / 13 / 2
Регистрация: 10.09.2011
Сообщений: 179

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

23.01.2012, 15:22. Показов 7885. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Лесенкой называется набор кубиков, в котором каждый более верхний слой содержит кубиков меньше, чем предыдущий. Требуется написать программу, вычисляющую число лесенок, которое можно построить из N кубиков.
http://acmp.ru/index.asp?main=task&id_task=16
как ее сделать? можете объяснить как сделать? (если кто то решил на паскале пришлите исхоник , если можете)
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.01.2012, 15:22
Ответы с готовыми решениями:

Задача "Лесенка". Как улучшить?
Здравствуйте! У меня задание: Коротышка шагает по целочисленному массиву. Шаг не велик, так что шагает либо на каждую ступень, либо...

Лесенка
На каждой из n + 2 ступенек лестницы записано целое число, причем на первой и на последней ступеньке записано число 0. На первой ступеньке...

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

6
20 / 13 / 1
Регистрация: 17.12.2010
Сообщений: 34
25.01.2012, 20:28
один цикл, в котором две строчки : увеличение этажа, вычитание этажа из кубиков.
0
3 / 3 / 0
Регистрация: 18.01.2012
Сообщений: 12
25.01.2012, 21:46
Цитата Сообщение от Cool-T Посмотреть сообщение
один цикл, в котором две строчки : увеличение этажа, вычитание этажа из кубиков.
этот прием не подходит под условия задачи. Это один элемент из множества. Представляет собой лесенку вида:
*
**
***
а вот такую:

*
***
******

или такую:

**
***
******
не отобразит
1
20 / 13 / 1
Регистрация: 17.12.2010
Сообщений: 34
25.01.2012, 22:20
Спасибо, я о другой лесенке вообще подумал. На том же сайте на днях делал)
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
26.01.2012, 09: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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
//////////////////////////////////////////////////////////////////////////////////////
//Лесенкой называется набор кубиков, в котором каждый более верхний слой 
//содержит кубиков меньше, чем предыдущий. Требуется написать программу, 
//вычисляющую число лесенок, которое можно построить из N кубиков.
//////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <limits>
#include <vector>
//////////////////////////////////////////////////////////////////////////////////////
typedef unsigned long long  T_int;
typedef std::vector<T_int>  T_row;
typedef std::vector<T_row>  T_matr;
//////////////////////////////////////////////////////////////////////////////////////
template<class T>
bool  successful_inc
    (
        T&  val,
        T   added_val        
    )
{
    bool  bool_res = val < std::numeric_limits<T>::max() - added_val;
 
    if(bool_res)
    {
        val += added_val;
    }
    return  bool_res;
}
//////////////////////////////////////////////////////////////////////////////////////
bool  L
    (
        int     N,
        T_int&  res
    )
{
    bool    bool_res = false;
    T_matr  matr( N + 1, T_row(N + 1) );
 
    for(int  n = 1; n <= N; ++n)
    {
        for(int  max_summand = 1; max_summand <= n; ++max_summand)
        {
            if(max_summand == n)
            {
                matr[n][max_summand] = 1;
            }
            else
            {
                for(int  i = 1; i < max_summand; ++i)
                {
                    bool_res =  successful_inc
                                    (
                                        matr    [n]                 [max_summand],
                                        matr    [n - max_summand]   [i]
                                    );
 
                    if(!bool_res)
                    {
                        return  bool_res;
                    }
                }
            }
        }
    }
 
    res = 0;
 
    for(int  i = 1; i <= N; ++i)
    {
        bool_res =  successful_inc
                        (
                            res,
                            matr[N][i]
                        );
 
        if(!bool_res)
        {
            return  bool_res;
        }
    }
    return  bool_res;
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));    
    
    for(;;)
    {
        int  n = 0;
        do
        {
            std::cout << "n = ";        
            std::cin >> n;        
        }while(n <= 0);
 
        T_int   res         =   0;
        bool    bool_res    =   L(n, res);
 
        if(bool_res)
        {
            std::cout << "res = "
                      << res
                      << std::endl
                      << std::endl;
        }
        else
        {
            std::cout   << "Значение n слишком велико."
                        << std::endl
                        << std::endl;
        }
    }
}
0
13 / 13 / 2
Регистрация: 10.09.2011
Сообщений: 179
26.01.2012, 17:43  [ТС]
Mr.X, извините , конечно, но вы везде кидаете сови исходники, неужели, нельзя объяснить, потребуется меньше времени и все пойму, так как некоторые не знают с++, притом еще и с класами, я не вижу смысл в ваших исходниках
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
27.01.2012, 07:45
Проще всего решить задачу с помощью рекурсии.
Общий вид будет такой
Code
1
2
3
4
5
6
7
8
BuildLadder(count, max) {
   if (count ==0 || max==0)
      return;
 
    for (i=1; i<=count && i<=max; i++) {
        BuildLadder(count - i, i-1);
    }
}

count - кол-во доступных шариков.
max - насколько большим может быть следующий слой

условие выхода очевидно: когда не можем добавить новый слой
Code
1
if (count ==0 || max==0)
основной цикл будет перебирать длины очередного слоя, и вызывая себя рекурсивно:
Code
1
2
3
    for (int i=1; i<=count && i<=max; i++) {
        BuildLadder(count - i, i-1);
    }
я думаю тут все понятно:
i - сколько кубиков отведено на нижний слой,
значит остается count-i кубиков.
так как каждый слой должен быть меньше, то max = i-1

Моя обвязка на java

Java
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
        private static Stack<Integer> res = new Stack<Integer>();
        
        private static void outResult() {
            for (Integer i : res) {
                System.out.print(" " + i);
            }
            System.out.println();
        }
 
        private static void BuildLadder(int count, int max) {
            if (max==0 || count==0) {
                outResult();
                return;
            }
            
            for (int i=1; i<=count && i<=max; i++) {
                res.push(i);
                BuildLadder(count - i, i-1);
                res.pop();
            }
        }
 
        public static void main(String[] args) {
            BuildLadder(5, 5);
        }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2012, 07:45
Помогаю со студенческими работами здесь

Лесенка
Ограничение времени: 1 с Ограничение памяти: 64 M На каждой из N+2 ступенек лестницы записано целое число, причем на первой и...

Лесенка
Привет программисты!!! Подскажите пожалуйста код программы! Задача программы: при нажатии кнопки &quot;вправо&quot; рисовался отрезок...

Лесенка из пробелов и #
нужно создать программу в которой пользователь будет вводить число, а результат должен быть такой лесенкой из пробелов и # Например...

Лесенка из чисел
Нужно написать програму, которая принимает 1 аргумент - число от 1 до 9 (включительно) Программа должна делать лесенку из чисел от 1 до...

Шифр «Лесенка»
К открытому тексту был применен шифр «Лесенка». Восстановите сообщение по шифрованному тексту...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru