本文主要是介绍UVa 11549 Calculator Conundrum / floyd判圈算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意是输入n k
然后只能显示k的前n位 然后k等于前n位的平方如此反复 求最大出现的数字
可以用map 或者set
新学了一个floyd判圈算法
就是比如2个赛跑 第二个比第一个速度快1倍 圆形跑道可以追上第一个人
这里就另k1做一次next k2做2次next 如果k1 == k2 就break
说明出现循环了
代码是书上的
#include <cstdio>
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int buf[100];
int next(int n, int k)
{if(!k)return 0;long long kk = (long long)k * k;int l = 0;while(kk){buf[l++] = kk % 10;kk /= 10;}int ans = 0;for(int i = 0; i < n; i++){ans *= 10;ans += buf[--l];}return ans;
}int main()
{int T;int n, k;scanf("%d", &T);while(T--){scanf("%d %d", &n, &k);int ans = k;int k1 = k, k2 = k;do{k1 = next(n, k1);ans = max(ans, k1);k2 = next(n, k2);ans = max(ans, k2);k2 = next(n, k2);ans = max(ans, k2);}while(k1 != k2);printf("%d\n", ans);} return 0;
}
这篇关于UVa 11549 Calculator Conundrum / floyd判圈算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!