【发布时间】:2020-07-08 05:36:41
【问题描述】:
所以,问题任务是:
给定一个整数 ????,计算所需的最小操作数 获取号码???从数字 1 开始。
这是我的代码:
#include<bits/stdc++.h>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> v(n+1);
for(int i = 0; i < n+1; i++)
{
v[i] = 0;
}
v[1] = 1;
for(int i = 1; i <= v.size() - 1; i++)
{
if((v[i + 1] == 0) || (v[i + 1] > v[i] + 1))
{
v[i + 1] = v[i] + 1;
}
if((2*i <= n) && (v[2*i] == 0 || v[2*i] > v[i] + 1))
{
v[2*i] = v[i] + 1;
}
if((3*i <= n) && (v[3*i] == 0 || v[3*i] > v[i] + 1))
{
v[3*i] = v[i] + 1;
}
}
vector<int> solution;
while(n > 1)
{
solution.push_back(n);
if(v[n - 1] == v[n] - 1)
{
n = n-1;
}
else if(n%2 == 0 && v[n/2] == v[n] - 1)
{
n = n/2;
}
else if(n%3 == 0 && v[n/3] == v[n] - 1)
{
n = n/3;
}
}
solution.push_back(1);
reverse(solution.begin(), solution.end());
for(size_t k = 0; k < solution.size(); k++)
{
cout << solution[k] << ' ';
}
}
我无法找出任何错误。这没有给我任何输出。如果你能帮助我,那就太好了。 输入和输出已在此处显示:
输入:
5
输出:
3
1 2 4 5
所以,基本上你必须给出为 n 完成这项任务所需的操作数,并提供中间数的序列。
【问题讨论】:
-
能否请您发布输入/输出和预期的输入/输出
-
哪些操作有效?在用 C++ 编码之前,你打算使用什么算法?
-
不相关:
i <= v.size() - 1可以表达为i < v.size()更具可读性 -
@Yunnosch 是的,我尝试调试但找不到我的错。