0

所以,我需要实现 TheSameDigit() 函数,基本上这个函数需要打印出所有具有相同数字的数字组合。TheSameDigit 函数必须是递归的并使用 NoDigits() 和 DelDigit() 函数。

NoDigits(int x) => 这个函数将返回位数

输入:123,输出:3

DelDigit(int x, int delD) => 此函数返回一个 int,其值为 x,但删除了 delD 位。

输入:x = 789,delD = 2,输出 = 79

TheSameDigit() => 打印具有相同数字的数字组合的函数(目前不工作)。

输入:123 输出:123 231 132 312 213 321

#include <iostream>

using namespace std;

int NoDigits(int x);
int DelDigit(int x, int delD);
void TheSameDigits(int x, int i, int origin, bool firstTime);


int main() {
    int num;
    cout << "Please input an integer: ";
    cin >> num;

    cout << "All integers have the same digits with " << num << " are: " << endl;
    TheSameDigits(num, 1, num, 1);
}

int NoDigits(int x) {
    if (x == 0) {
        return 0;
    }
    return 1 + NoDigits(x / 10);
}

int DelDigit(int x, int delD) {
    int size = NoDigits(x);

    int reverse = 0;
    for (int i = 0; x != 0; i++, x /= 10) {     
        if (i != size - delD) {
            int digit = x % 10;
            reverse = reverse * 10 + digit;
        }
    }

    int newNum = 0;
    for (int i = 0; reverse != 0; i++, reverse /= 10) {
        int digit = reverse % 10;
        newNum = newNum * 10 + digit;
    }
    return newNum;
}

void TheSameDigits(int x, int i, int origin, bool firstTime) {
    const int size = NoDigits(origin);
    // Base case
    if (origin == x && !firstTime) {
        return;
    }
    if (i == size) {
        i = 1;
    }

    // Find the removed digit
    int temp = x;
    int removedDigit;
    for (int j = 0; temp > 0; j++, temp /= 10) {     
        if (j == size - i) {
            removedDigit = temp % 10;
            break;
        }
    }

    // Calculate the next combination
    int nextNum = (DelDigit(x, i) * 10) + removedDigit;
    cout << nextNum << endl;

    TheSameDigits(nextNum, i + 1, origin, false);
}

有人可以帮我实现 TheSameDigit 功能或给我一个想法吗?谢谢!

4

0 回答 0