我正在学习动态编程,我想解决以下问题:
问题介绍:给你一个基元计算器,它可以用当前数x执行以下三种操作:x乘以2,x乘以3,或者1加到x。你的目标是给定一个正整数n,从数字1开始,找出获得数字n所需的最小运算次数。
任务给定一个整数n,计算从数字1开始获得数字n所需的最小操作数。输入由单个整数1
代码
#include <iostream>
#include <climits>
#include<vector>
#include<list>
void primitive_calculator(int number)
{
std::vector<int> min_steps(number+1,INT_MAX);
std::list<int> path[number+1];
min_steps[0]=0; min_steps[1]=0;
path[0].push_back(0);
path[1].push_back(1);
for (int i=2 ; i<=number ; i++)
{
if(i%3==0)
{
if(min_steps[i/3] < min_steps[i])
{
min_steps[i]=min_steps[i/3]+1;
path[i]=path[i/3];
path[i].push_back(i);
}
}
if(i%2==0)
{
if( min_steps[i/2] < min_steps[i])
{
min_steps[i]=min_steps[i/2]+1;
path[i]=path[i/2];
path[i].push_back(i);
}
}
if( min_steps[i-1] < min_steps[i])
{
min_steps[i]=min_steps[i-1]+1;
path[i]=path[i-1];
path[i].push_back(i);
}
}
std::cout<<min_steps[number]<<"\n";
while(!path[number].empty())
{
std::cout<<path[number].front()<<" ";
path[number].pop_front();
}
}
int main()
{
int number;
std::cin>>number;
primitive_calculator(number);
return 0;
}
此程序因输入数大于10^5而失败。为什么会这样?如何改进代码?
您的问题已联机:
std::list<int> path[number+1];
>
std::list
变量数组,因此如果数量很大,堆栈会溢出并出现段错误。警告:ISO C++禁止可变长度数组“path”[-wvla]
错误:非POD元素类型“std::list”的可变长度数组
所以不要在堆栈上定义巨大的变量。
相反,您应该做的是使用
std::vector
,例如将行更改为:std::vector<std::list<int>> path(number+1);
那你的问题就解决了。
认证之后,如果我调用任何方法,比如< code>os.compute()。口味()。list()或< code>os.images()。list(),我得到< code >连接超时。为什么会这样? 我在GoogleCloudsPlataform VM上设置了一个带有RDO包堆栈的OpenStack。我正在对域和项目进行身份验证。我尝试了没有项目的身份验证,方法调用没有超时,但是响应是错误的,例如,
我试图解决Dijkstra算法上的一个hackerrank问题--https://www.hackerrank.com/challenges/dijkstrashortreach。我在使用我自己的Dijkstra代码逻辑。虽然我的代码解决了更容易的测试用例,但它在更高的测试用例上失败了。我猜我的代码在某个地方缺少了一些传递性,并且我得到的某个节点的值高于预期。你能帮我找出我的错误吗?问题:输入格式
我正在使用Angular2 final(2.0.2)和angular cli。我正在尝试将其设置为使用PhantomJS运行单元测试。使用Chrome和karma Chrome launcher运行规范-所有测试都通过。在Phantomjs预构建2.1中运行相同的功能。13和karma phantomjs launcher 1.0。2次测试失败。 我添加了phantomjs启动器到插件数组中kar
我可能做了一些非常基本的错误,但我找不到任何关于如何从这一点上站出来的指针,我想知道我如何才能避免这一点。由于我是Scala和Spark的新手,我不确定问题是来自其中一个还是另一个,或者两者都有。我目前正在我自己的笔记本电脑上运行这个程序,它适用于数组长度不是很长的输入。提前谢了。
是的,我知道《埃拉托斯特尼筛》在标准的图书馆Prime类中,但我正在尝试实现自己的练习。 我正在逐字逐句地按照维基百科上的描述进行操作: 通过Eratosthenes的方法找到所有小于或等于给定整数n的素数:1.创建一个从2到n的连续整数列表:(2,3,4,…, n)。 2.最初,让p等于2,第一个素数。 3.从p开始,通过以p为增量计数到n来枚举其倍数,并在列表中标记它们(这些将是2p,3p,4
我目前有一个问题,一个'而'循环不执行。如果输入文本文件有下一行,我将循环条件设置为true。然而,当我执行我的程序时,循环没有运行。我通过添加一个“System.out.println(text)”来确认这一点,正如我所怀疑的,没有产生任何文本。 什么问题导致循环无法执行?