我使用了 chatGPT 中的一些代码来帮助我生成我输入的所有数字组合。因此,例如,如果我输入 1、2、3,它将打印出 1、2、3、12、13、21 等一直到 321。
问题是我不知道 ut 如何获取诸如“312”或“13”之类的数字,因为每次函数循环时代码似乎都应该以相同的顺序遍历数字,但事实并非如此?
完整代码如下:
#include <iostream>
#include <cmath>
using namespace std;
void generateNumbers(int n, int number, int digits[], int y, int pot)
{
if (n == y) { // ako smo generirali n znamenki, ispiši trenutni broj
int min = pow(10, pot);
if (number >= min) {
cout << number << endl;
return;
}
}
for (int i = 0; i < 10; i++)
{
if (digits[i] > 0) // ako se znamenka i pojavljuje u unesenom nizu
{
int newNumber = number * 10 + i;
int newDigits[10];
copy(digits, digits + 10, newDigits);
newDigits[i]--;
generateNumbers(n - 1, newNumber, newDigits, y, pot);
}
}
}
int main()
{
int n;
cout << "Enter the number of digits: ";
cin >> n;
int digits[10] = { 0 };
cout << "Enter " << n << " digits: ";
for (int i = 0; i < n; i++)
{
int digit;
cin >> digit;
digits[digit]++;
}
for (int i = 0; i < 10; i++) {
cout << digits[i];
}
cout << endl;
cout << "All " << n << "-digit numbers without repeating digits:" << endl;
for (int i = n - 1; i >= 0; i--) {
static int o = -1;
o++;
generateNumbers(n, 0, digits, i, o);
}
return 0;
}
我尝试输入 1,2,3 并打印出所有正确的数字,这很棒,但出乎意料。