WA10的问题
查看原帖
WA10的问题
883298
liyichen6楼主2023/8/8 20:27

//因为用来判断循环节的map那里要保守一点把输入的m也存储进去(数组里也是要存),毕竟可能会有从m开始循环的圆舞曲(至于什么不足4位补零没这个数据好像)

#include <bits/stdc++.h>
using namespace std;
long long m, n, m1, a[114514];
string s;
map<long long, bool> unomap;
bool b = 0;
int main()
{
    while (cin >> m)
    {
        m1 = m;
        unomap.clear();
        memset(a, 0, sizeof(a));
        b = 0;
        a[1] = m;
        unomap[m] = 1;
        for (int cnt = 2;; cnt++)
        {
            s = to_string(m1);
            sort(s.begin(), s.end());
            string s1 = s;
            reverse(s1.begin(), s1.end());
            n = stoll(s1) - stoll(s);
            if (n * 10 < 10000)
                n *= 10;
            a[cnt] = n;
            m1 = n;
            if (unomap[n] == 0)
                unomap[n] = 1;
            else
            {
                for (int i = 1; i <= cnt; i++)
                {
                    if (a[i] == n)
                    {
                        if (!b)
                            b = 1;
                        else
                            break;
                    }
                    if (b == 1)
                        printf("%lld ", a[i]);
                }
                cout << '\n';
                break;
            }
        }
    }
    return 0;
}
2023/8/8 20:27
加载中...