• Algorithm --> 6174问题


    6174问题

    假设一个各位数字不相同的四位数,把所有数字从大到小排序后得到a, 从小到大排序后得到b,然后用a-b替换原来这个数,继续操作。例如,从1234出发,依次有4321-1234=3078,8730-378=8352,8532-2358=6174,7641-1467=6174,回到了自己。

    输入一个n位数,输出操作序列知道出现循环。

    样例输入:1234
    样例输出:1234 -> 3078 -> 8352 -> 6174 -> 6174

    程序:

    #include<iostream>
    #include<cstring>
    #include<stdio.h>
    using namespace std;
    
    int num[2000];
    int cnt;
    bool found;
    
    int getNext(int n)
    {
        int a, b;
        char s[10], t;
        sprintf(s, "%d", n);  //将整数打印成字符串保存到s中
        int len = strlen(s);
        for(int i =  0; i < len; i++)
        {
            for(int j = i + 1; j < len; j++)
            {
                if(s[i] > s[j])
                {    
                    t = s[i]; s[i] = s[j]; s[j] = t;
                }
            }
        }
        sscanf(s, "%d", &a);  //从s中读入数据
        
        for(int i = 0 ; i < len / 2; i++)
        {
            t = s[i]; s[i] = s[len - 1 - i]; s[len - 1 - i] = t;
        }
        sscanf(s, "%d", &b);
        
        return b - a;
    }
    
    int main()
    {
        cin >> num[0];
        cout << num[0];
        
        cnt = 1;
        while(true)
        {
            num[cnt] = getNext(num[cnt - 1]);
            cout << " -> " << num[cnt];
            found = false;
            for(int i = 0; i < cnt; i++)
            {
                if(num[i] == num[cnt])
                {
                    found = true; 
                    break;
                }
            }
            if(found) break;
            cnt++;
        }
        cout << endl;
        return 0;
    }
  • 相关阅读:
    .c 文件取为.o文件
    wildcard 处理全部文件
    专家解读Linux操作系统内核中的GCC特性
    Yeoman:适合现代Web应用的现代工作流
    【转】nodejs
    node.js
    2019暑假集训 种树
    2019.6.5 NOIP2014 day2 t2 寻找道路
    2019.6.1 最优贸易
    2019.5.11 海淀区赛之杯子
  • 原文地址:https://www.cnblogs.com/jeakeven/p/4630440.html
Copyright © 2020-2023  润新知