c++编程,对于两个整数a,b,如果b是严格大于a且各位数字均不相同的最小整数,就视b为a的跟屁虫。现在给定a,请正在学习编程的你找出它的跟屁虫b。 输入 一个整数a,1000≤a≤9000。 输出 一个整数b,题目保证有解。
时间: 2023-12-28 12:03:23 浏览: 71
c++实现一个简单的大整数算术运算程序 主要功能计算两个大整数 (220 位)的加减法等算术运算 +-*/ 根号 幂都有
以下是一种可能的 C++ 代码实现:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int getNext(int n) {
vector<int> digits;
while (n > 0) {
digits.push_back(n % 10);
n /= 10;
}
reverse(digits.begin(), digits.end());
int i = digits.size() - 2;
while (i >= 0 && digits[i] >= digits[i + 1]) {
i--;
}
int j = i + 1;
while (j < digits.size() && digits[j] > digits[i]) {
j++;
}
swap(digits[i], digits[j - 1]);
sort(digits.begin() + i + 1, digits.end());
int next = 0;
for (int k = 0; k < digits.size(); k++) {
next = next * 10 + digits[k];
}
return next;
}
int main() {
int a;
cin >> a;
int b = getNext(a);
while (b <= a) {
b = getNext(b);
}
cout << b << endl;
return 0;
}
```
这个问题可以通过从右往左扫描数字找到第一个不满足单调递减的位置,然后再从右往左扫描找到第一个大于该位置上数字的位置,并交换这两个位置上的数字,并将后面的数字排序。这样就得到了下一个最小的数。如果这个数仍然小于等于原数,就继续找下一个。注意当原数本身就是最大的没有重复数字的四位数时,下一个最小的数就是最小的四位数 1023。
阅读全文