C++ 6174 猜数字游戏算法实现
C++ 6174 猜数字游戏算法实现
题目描述 任意一个四位正整数(4 位数字相同者除外),将各位数字组成一个最大数和最小数,两数相减并重复这一过程必得 6174。
输入格式 输入一个四位正整数。
输出格式 输出文件包含多行,组成一个最大数和一个最小数就输出一行,直到结果为 6174。
输入输出样例
样例 1
输入样例 复制
4123
输出样例 复制
4321-1234=3087
8730-378=8352
8532-2358=6174
思路:
- 将输入的四位正整数拆分成四个数字,并按照从大到小排序。
- 从大到小的数字组成一个最大数和一个最小数。
- 将最大数减去最小数,得到差值。
- 如果差值等于 6174,则输出结果;否则,将差值作为下一轮的输入,重复步骤 1-3。
C++代码实现:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
// 将四位正整数拆分成四个数字
vector<int> splitNumber(int num) {
vector<int> digits;
for (int i = 0; i < 4; i++) {
digits.push_back(num % 10);
num /= 10;
}
reverse(digits.begin(), digits.end());
return digits;
}
// 将四个数字组成一个最大数和一个最小数
void getMaxMin(int num, int& maxNum, int& minNum) {
vector<int> digits = splitNumber(num);
sort(digits.begin(), digits.end(), greater<int>());
maxNum = digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];
minNum = digits[3] * 1000 + digits[2] * 100 + digits[1] * 10 + digits[0];
}
int main() {
int num;
cin >> num;
while (num != 6174) {
int maxNum, minNum;
getMaxMin(num, maxNum, minNum);
int diff = maxNum - minNum;
cout << maxNum << '-' << minNum << '=' << diff << endl;
num = diff;
}
return 0;
}
原文地址: http://www.cveoy.top/t/topic/bNlp 著作权归作者所有。请勿转载和采集!