zoukankan      html  css  js  c++  java
  • uva 11549 CALCULATOR CONUNDRUM

    题目链接

    刘汝佳算法竞赛经典入门训练指南p42

    代码1:

    #include <set>
    #include <iostream>
    #include <sstream>
    using namespace std;
    
    int next(int n, int k)
    {
        stringstream ss;
        ss <<(long long)k*k;
        string s = ss.str();
        if (s.length() > n)
            s = s.substr(0, n);
        int ans = 0;
        stringstream ss2(s);
        ss2 >> ans;
        return ans;
    }
    
    int main()
    {
        int t;
        int n, k;
        cin>>t;
        while (t--)
        {
            cin>>n>>k;
            set<int> s;
            int ans = k;
            while (!s.count(k))
            {
                s.insert(k);
                if (k > ans)
                    ans = k;
                k = next(n, k);
            }
            cout << ans << endl;
        }
        return 0;
    }
    

    代码2:

    #include <set>
    #include <iostream>
    #include <sstream>
    using namespace std;
    
    int next(int n, int k)
    {
        int buf[10];
        if (!k)
            return 0;
        long long k2 = (long long)k*k;
        int l = 0;
        while (k2 > 0)
        {
            buf[l++] = k2%10; k2 /= 10;
        }
        if (n > l)
            n = l;
        int ans = 0;
        for (int i = 0; i < n; i++)
            ans = ans*10 + buf[--l];
        return ans;
    }
    
    int main()
    {
        int t;
        int n, k;
        cin>>t;
        while (t--)
        {
            cin>>n>>k;
            set<int> s;
            int ans = k;
            while (!s.count(k))
            {
                s.insert(k);
                if (k > ans)
                    ans = k;
                k = next(n, k);
            }
            cout << ans << endl;
        }
        return 0;
    }
    
    代码3(Floyd判圈法):

    #include <set>
    #include <iostream>
    #include <sstream>
    using namespace std;
    int buf[10];
    int next(int n, int k)
    {
        if (!k)
            return 0;
        long long k2 = (long long)k*k;
        int l = 0;
        while (k2 > 0)
        {
            buf[l++] = k2%10; k2 /= 10;
        }
        if (n > l)
            n = l;
        int ans = 0;
        for (int i = 0; i < n; i++)
            ans = ans*10 + buf[--l];
        return ans;
    }
    
    int main()
    {
        int t;
        int n, k;
        cin>>t;
        while (t--)
        {
            cin>>n>>k;
            int ans = k;
            int k1 = k, k2 = k;
            do
            {
                k1 = next(n, k1);
                k2 = next(n, k2);
                if (k2 < ans)
                    ans = k2;
                k2 = next(n, k2);
                if (k2 < ans)
                    ans = k2;
            }while (k1 != k2);
            cout << ans << endl;
        }
        return 0;
    }
    



  • 相关阅读:
    SSL评测
    EF+SQLSERVER控制并发下抢红包减余额(改进)
    关于游标嵌套时@@FETCH_STATUS的值
    windows下限制Redis端口只能由本机访问
    windows下配置Redis
    Node.js 使用gm处理图像
    Git 与其他系统
    git-svn 简易 操作指南
    git-svn — 让git和svn协同工作
    Git和SVN共存的方法
  • 原文地址:https://www.cnblogs.com/xindoo/p/3595094.html
Copyright © 2011-2022 走看看