我在使此代码按我希望的方式工作时遇到问题。任务是编写一个程序,打印出通过对输入的数字n(1 <= n <= 9)从数字1到n进行排列而获得的所有数字。该程序还应该打印出有多少这样的数字。我做了一个for循环,得到n的阶乘,这样我就可以得到排列的数量,并将1到n的所有数字组合成一个整数,因为我认为应该有一种方法可以找到这种排列。所以我的问题是如何找到这些排列?
#include <iostream>
using namespace std;
int main(){
int n;
int j;
int r=0;
int t=1;
double f=1;
cin>>n;
for(int p=1;p<=n-1;p++){
t=t*10;
}
int u=t;
//calculates the factorial of n
for(int o=1;o<=n;o++){
f=f*o;
}
//writes numbers from 1 to n into an integer
for(int d=1;d<=n;d++){
j=d*u;
r=r+j;
u=u/10;
}
}
答案 0 :(得分:2)
首先,将数字读入字符串。如果要确保格式正确,可以将其读取为整数,然后将其写入字符串:
int number;
if (!(std::cin >> number)) {
// Failure to read number. Do some diagnostic.
throw std::runtime_error("invalid number");
}
// Number read successfully. Write it to a string.
std::string s = std::to_string(number);
第一个排列是所有数字的排序排列。使用std::sort
很容易获得这一点。
std::sort(s.begin(), s.end());
最后,使用std::next_permutation
获取其他排列。一旦获得最后一个,它将返回false
并退出循环。
int n{0};
do {
++n;
std::cout << s << '\n';
} while (std::next_permutation(s.begin(), s.end()));
std::cout << "Number of permutations: " << n;