Получение ошибки сегментации (дамп ядра) в программе на c ++ - PullRequest
0 голосов
/ 22 сентября 2019

Я только начал динамическое программирование, но я не могу продолжать, поскольку у меня постоянно появляется ошибка ошибки сегментации.

Я пытаюсь решить этот вопрос:

Для положительного целого числа вы можете выполнить любой из следующих 3 шагов.1.) Вычтите 1 из этого.(n = n - 1), 2.) Если его делится на 2, делим на 2. (если n% 2 == 0, то n = n / 2), 3.) Если его делим на 3, делим на 3. (если n% 3 == 0, то n = n / 3).Теперь вопрос заключается в том, что с учетом положительного целого числа n найти минимальное количество шагов, которое занимает от n до 1

Использование памятки

#include<bits/stdc++.h>

using namespace std;

int get_min_steps(int n,int visited[])
{
  int r;
  cout<<"0"<<"\n";
  if(n==1)
  {
    cout<<n<<" "<<"0"<<"\n";
    return 0;
  }
  else if(visited[n]!=-1)
  {
    cout<<n<<" "<<visited[n]<<"\n";
    return visited[n];
  }
    r=1+get_min_steps(n-1,visited);
  if(n%2==0)
  {
    cout<<"3"<<"\n";
    r=min(r,get_min_steps(r/2,visited));
  }
  else if(n%3==0)
  {
    cout<<"4"<<"\n";
    r=min(r,get_min_steps(r/3,visited));
  }
  cout<<"n"<<" "<<r<<"\n";
  visited[n]=r;
  return r;
}

int main()
{
  int n;
  cout<<"Enter the number : ";
  cin>>n;
  int visited[n+1];
  for(int i=0;i<n+1;i++)
  {
    visited[i]=-1;
  }
  int min=get_min_steps(n,visited);
  cout<<min<<"\n";
  return 0;
}

Использование подхода снизу вверх

#include<bits/stdc++.h>

using namespace std;

int main()
{
    int n;
    cout<<"Enter any number : ";
    cin>>n;
    int a[n+1];
    a[1]=0;
    for(int i=2;i<=n;i++)
    {
        int r=1+a[i-1];
        if(r%2==0)
        {
            r=min(r,1+a[n%2]);
        }
        else if(r%3==0)
        {
            r=min(r,1+a[n%3]);
        }
        a[i]=r;
    }

    cout<<"Big day";

    while(n!=1)
    {
        cout<<a[n]<<" ";
        cout<<"#";
        n=a[n];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...