Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71

Вывести треугольник Стирлинга

09.04.2023, 19:08. Показов 2537. Ответов 34
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте! Кто сможет переписать код к задачке про треугольник Стирлинга из двумерного массива в одномерный?
Буду очень благодарен!
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
#include <iostream>
 
using namespace std;
 
int main()
{
    unsigned int N;
    cin >> N;
    unsigned int ** s = new unsigned int*[N+1];
    for(unsigned int i = 0; i <= N; ++i)
        s[i] = new unsigned int[N+1]{0};
    for(unsigned int n = 0; n < N; n++)
    {
        for(unsigned int k = 0; k <= n; k++)
        {
            if (k == n) s[n][k] = 1;
            else if (k == 0 || n == 0) s[n][k] = 0;
            else s[n][k] = k*s[n-1][k] + s[n-1][k-1];
            cout  << s[n][k] << " ";
        }
        cout << endl;
    }
    
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.04.2023, 19:08
Ответы с готовыми решениями:

Треугольник Стирлинга
По заданному числу n нужно построить первые n строк треугольника Стирлинга. Треугольник Стирлинга — это бесконечная таблица, состоящая...

Треугольник Стирлинга
По заданному числу n нужно построить первые n строк треугольника Стирлинга.Треугольник Стирлинга — это бесконечная таблица, состоящая из...

Треугольник Стирлинга
Требуется найти вывести N верхних строк треугольника Стирлинга. Треугольник Стирлинга —это треугольник, состоящий из чисел следующего...

34
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
10.04.2023, 19:55
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от igorek_21 Посмотреть сообщение
преподаватель в институте сказал, что данную задачу можно решить без векторов и динамических массивов
Можно !

Вы нас за мартышок цирковых держите ?

Переписать код из двумерного массива в одномерный
Сами же просили с массивом !!!
1
фрилансер
 Аватар для Алексей1153
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,283
10.04.2023, 19:59
SmallEvil, вот без звёздочек
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
#include <iostream>
#include <vector>
#include <functional> 
 
int main(){
    int n = 0;
    if (std::cin >> n && !(n < 0)){
        std::vector<int> arr( std::multiplies<>{}((n+1),(n+2)) / 2 );
        size_t p=0;
        arr[p++]=1;
        for(size_t i = 1; i <= n; ++i){
            arr[p++]=0;
            for(size_t k = 1; k < i; ++k){
                arr[p] = std::multiplies<>{}(k , arr[p-i]) + arr[p - i - 1];
                ++p;
            }
            arr[p++] = 1; 
        }
        p = 0;
        for(size_t i = 0; i <= n; ++i){
            for(size_t k = 0; k <= i; ++k)
                std::cout << arr[p++] << ' ';
            std::cout << std::endl;
        }
    }
}
0
Модератор
Эксперт С++
 Аватар для zss
13789 / 10981 / 6492
Регистрация: 18.12.2011
Сообщений: 29,278
11.04.2023, 10:54
Цитата Сообщение от igorek_21 Посмотреть сообщение
Переписать код без вектора
Как я понял, ТС надо написать программу вообще без использования массивов.
В таком случае, "Переписать" - это не то слово.
Придётся все написать заново,
пересчитывая с нуля значения в каждой строке:
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
#include <iostream>
typedef long long LL;
LL fact(LL n)
{
    LL t=1;
    for(LL i=2;i<=n;i++)
        t*=i;
    return t;
}
LL C(LL n,LL k)
{
    return fact(n)/fact(k)/fact(n-k);
}
LL S(LL n,LL k)
{
    if(n<=1)return 1L;
    if(k==0)return 0L;
    if(k==1)return 1L;
    if(k==n)return 1L;
    if(k>n) return 0L;
    LL t=0L;
    for(LL i=k-1;i<=n-1;i++)
        t+=C(n-1,i)*S(i,k-1L);
    return t;
}
int main()
{
    LL N=0;
    std::cin >> N;
    std::cin.get();
    for (LL n = 1; n <= N; ++n) 
    {
        std::cout << n << '\t';
        for (LL k = 1; k <= n; ++k)
            std::cout << S(n,k) << '\t';
        std::cout<<std::endl;
    }
    std::cin.get();
    return 0;
}
1
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
12.04.2023, 08:17  [ТС]
не совсем так) мне нужен был просто одномерный массив (не динамический, без функций, вектора, с использованием только одной библиотеки iostream), но все равно спасибо за помощь
0
фрилансер
 Аватар для Алексей1153
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,283
12.04.2023, 08:28
igorek_21, так n заранее неизвестно, как тут простым массивом обойтись ?
0
Модератор
Эксперт С++
 Аватар для zss
13789 / 10981 / 6492
Регистрация: 18.12.2011
Сообщений: 29,278
12.04.2023, 08:29
Цитата Сообщение от igorek_21 Посмотреть сообщение
мне нужен был просто одномерный массив
Так SmallEvil именно такой код и привёл в 17 сообщении.
Что в нём не так?
Если хотите массив фиксированного размера, то замените
Цитата Сообщение от SmallEvil Посмотреть сообщение
int * arr = new int[((n+1)*(n+1) + (n+1)) / 2];
например, на
C++
1
int arr[200];
Этого хватит на треугольник из 15 строчек.
А 16-я все равно неправильная из-за переполнения разрядной сетки.

Так что, советую при вводе ограничить n числом 15.

Кстати, мой код работает с числами типа long long int
и правильно считает до n=21
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
12.04.2023, 19:36  [ТС]
а если например попробовать исправить данный код? Попробовал переделать, но числа не те получаются

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
#include <iostream>
 
using namespace std;
 
int main()
{
   long n, i, j;
   cin>>n;
   long a[n+1];
   for(i=0; i<=n; i++){
    a[i]=0;
   }
    for(i=n; i>0; i--){
    a[i]=1;
   }
   a[0]=1;
   for(j=1; j<n; j++){
    for(i=j; i>0; i--){
        cout<<a[i-1]<<" ";
        a[i]=a[i]*(i-1)+a[i-1];
    }
     cout<<endl;
   }
  for(i=0; i<n; i++)
  cout<<a[i]<<" ";
}
0
Модератор
Эксперт С++
 Аватар для zss
13789 / 10981 / 6492
Регистрация: 18.12.2011
Сообщений: 29,278
12.04.2023, 20:33
igorek_21, чем Вас не устроил мой вариант, предложенный в сообщении 26?
Цитата Сообщение от igorek_21 Посмотреть сообщение
cin>>n;
long a[n+1];
Так делать нельзя, это нестандартный способ, который не поддерживается большинством компиляторов,
да и n+1 элемент - это мало. Надо (n+1)*(n+2)/2 штук
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
13.04.2023, 08:30  [ТС]
мне нужно без использования "*" и в квадратных скобках без ++
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.04.2023, 08:43
Цитата Сообщение от zss Посмотреть сообщение
да и n+1 элемент - это мало
Это для одной строки, самой последней.
Веревкин так и делал.
Но автор не осознает ничего, или просто стебется (к чему я до сих пор склоняюсь)
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
13.04.2023, 09:05  [ТС]
не к тому склоняетесь
0
Модератор
Эксперт С++
 Аватар для zss
13789 / 10981 / 6492
Регистрация: 18.12.2011
Сообщений: 29,278
13.04.2023, 09:13
Цитата Сообщение от igorek_21 Посмотреть сообщение
мне нужно без использования "*" и в квадратных скобках без ++
я же написал, что в 17 сообщении вместо
Цитата Сообщение от SmallEvil Посмотреть сообщение
int * arr = new int[((n+1)*(n+1) + (n+1)) / 2];
напишите просто
C++
1
int arr[200];
и удалите строку delete[] arr;
Вот и пропадут все звездочки.
А квадратные скобки там и так стоят, где надо.
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
13.04.2023, 09:29  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
arr[p++]
можно ли написать код без плюсов в квадратных скобках?
0
фрилансер
 Аватар для Алексей1153
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,283
13.04.2023, 10:36
igorek_21,

C++
1
2
arr[p];
p++;
1
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
13.04.2023, 11:02  [ТС]
Всем большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.04.2023, 11:02

Убрать пробел в конце строки (Треугольник Стирлинга)
Требуется найти вывести N верхних строк треугольника Стирлинга. Треугольник Стирлинга —это треугольник, состоящий из чисел следующего...

Вывести N верхних строк треугольника Стирлинга
Помогите,пожалуйста. Не понимаю какую формулу подставлять &quot;Вывести N верхних строк треугольника Стирлинга. Треугольник Стирлинга – это...

Вывести на экран: прямоугольник; прямоугольный треугольник; равносторонний треугольник; ромб
Используя циклы и метод: Console.Write(“*”), Console.Write(“ ”), Console.Write(“\n”) (для перевода на новую строку), вывести на экран: ...

Вывести асимптотическую формулу для произведения, используя формулу Стирлинга
(2n-1)!! = 1*3*5...(2n-1)

Создать базовый класс Треугольник с 2 наследниками: Равносторонний треугольник, Прямоугольный треугольник
Задание звучит так: Нужно создать базовый класс Треугольник с двумя наследующими его классами - равносторонний треугольник (·...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru