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

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

23.01.2012, 15:22. Показов 7846. Ответов 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
Ответ Создать тему
Новые блоги и статьи
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