所以,我需要实现 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 功能或给我一个想法吗?谢谢!