如何指示/打印基于斐波那契数字的程序的不同组合
How can I indicate/print the distinct combinations to this Fibonacci number-based program?
我正在构建一个函数,以确定人们可以爬到楼梯顶部的不同方式(可以攀登1或2步(。尽管我已经获得了打印几种方式的主要功能,但我对如何打印特定组合感到困惑,即有三种爬升的方法:(1,1,1,1(,(1,2(,(2,1(。
#include <iostream>
using namespace std;
int climbStairs(int n);
int main()
{
int s = 4;
cout << "There are " << climbStairs(s) << " ways to climb to the top: ";
return 0;
}
int climbStairs(int n)
{
if(n == 0) return 0;
if(n == 1) return 1;
int one = 1;
int two = 0;
int result = 0;
for(int i = 1;i <= n;i++)
{
result = one + two;
two = one;
one = result;
}
return result;
}
关于如何打印组合的任何解释都会有所帮助,非常感谢!
,而不是让变量one
和two
是整数,而是将它们定义为"路径"集。然后,做同样的事情,除了 result
是 one
,其中1附加到其中的所有"路径"加上 two
,其中2个附加到其中的所有"路径"。
该算法看起来像这样(我建议在查看我的代码之前自己尝试一下(:
#include <set>
#include <string>
#include <iostream>
std::set<std::string> climbStairs(int n)
{
if(n == 0)
return {""};
if(n == 1)
return {"1"};
std::set<std::string> one({"1"}), two({""}), result;
for(int i = 2; i <= n; i++)
{
result.clear();
for(const std::string &path : one)
{
result.insert(path + '1');
}
for(const std::string &path : two)
{
result.insert(path + '2');
}
two = move(one);
one = move(result);
}
return one;
}
int main()
{
std::set<std::string> s = climbStairs(5);
for(const std::string &path : s)
{
std::cout << path << 'n';
}
}
这是我知道的最好方法。
相关文章:
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 用于检查数字是否有数字或可被该数字的值整除的程序
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 为什么当我输入较大的数字时,我的程序会到达文件末尾?
- 如何在C++程序中使用下标数字?
- 为什么使用数组元素查找最大数字的程序不起作用?
- 如何在 WindowProc 处理程序中区分箭头键和数字键盘?
- 在 txt 文件中显示前两个数字的程序
- 在不添加进位的情况下添加数字的C++程序
- 为什么我的程序在读取/写入文件时会删除最重要的数字?
- 一个C++程序,用于在输入位数时输出具有特定位数的 .txt 文件中的所有数字
- 每次运行此 c++ 程序时如何获得不同的数字?
- 程序 查找数字的重复
- 反转一个数字程序不起作用,为什么?
- 为什么这个程序接受整数和字母数字输入并打印它们? C++ 中的 std::string 也采用整数值吗?
- 如何制作一个查找数字平方值的 c++ 程序
- 双精度数字程序意外值
- For循环-魔术数字程序
- 完全数字程序中的逻辑错误