有人可以解释这段代码如何获得数字排列[关闭]

问题描述 投票:0回答:0

我使用了 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 并打印出所有正确的数字,这很棒,但出乎意料。

c++ function permutation
© www.soinside.com 2019 - 2024. All rights reserved.