这行代码的问题如下
主要问题分析: 字符串构造错误:当输入n=3时,您初始构造的字符串是"A+B+C",但next_permutation会对整个字符串进行排列,包括"+"符号,这会导致产生无效的排列如"A+BC+"。
排列数量计算错误:对于n个字母,应该有n!种排列方式,但您计算的是(n-1)!,这会导致输出不完整。
字母生成逻辑问题:初始字符串构造时,第一个字母前没有"+",但后续字母前都有"+",这导致了不一致的格式。
所以修改后为
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int main(){
int n = 0 , a = 1;
vector<string> arrange;
string letters;
cin >> n;
for (int i = 0; i < n; i++) {
letters += 'A' + i;
}
do {string betters;
for (int j = 0 ; j < n ; j++){
if (j > 0){
betters += "+";
}
betters += letters[j];
}
arrange.push_back(betters);}
while (next_permutation(letters.begin(),letters.end()));
for (int i = 0; i < n; i++){
a = a* (i+1);
}
for (int j = 0 ; j < a ; j++){
cout << arrange[j] <<" Problem"<<endl;
}
return 0;
}
通过把用来储存带加号的排列字符串betters内置于do while循环内 从而防止了对加号进行排序