C++ 6174 猜数字游戏算法实现

题目描述 任意一个四位正整数(4 位数字相同者除外),将各位数字组成一个最大数和最小数,两数相减并重复这一过程必得 6174。

输入格式 输入一个四位正整数。

输出格式 输出文件包含多行,组成一个最大数和一个最小数就输出一行,直到结果为 6174。

输入输出样例

样例 1

输入样例 复制
4123
输出样例 复制
4321-1234=3087
8730-378=8352
8532-2358=6174

思路:

  1. 将输入的四位正整数拆分成四个数字,并按照从大到小排序。
  2. 从大到小的数字组成一个最大数和一个最小数。
  3. 将最大数减去最小数,得到差值。
  4. 如果差值等于 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;
}
C++ 6174 猜数字游戏算法实现

原文地址: http://www.cveoy.top/t/topic/bNlp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录