当前位置: 代码迷 >> 综合 >> UVa 11549 Calculator Conundrum (训练指南,Floyd 判圈算法)
  详细解决方案

UVa 11549 Calculator Conundrum (训练指南,Floyd 判圈算法)

热度:78   发布时间:2023-12-13 19:50:51.0

算法竞赛训练指南, 42 页

注意:
1、 用数组来记录一个数的各位的数字
2、 快慢指针来记录链表环的入点(Floyd 判圈算法)

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int N, K, Test;int next(int n, int k)
{
    if(0 == k){
    return 0;}int ans = 0;int buf[100];long long k2 = (long long)k * k;int cnt = 0;while(k2){
    buf[cnt++] = k2 % 10;k2 /= 10;}if(n > cnt){
    n = cnt;}for(int i = 0; i < n; ++i)	//返回高位的 n 位{
    ans = ans * 10 + buf[--cnt];}return ans;}int main()
{
    scanf("%d", &Test);while(Test--){
    scanf("%d%d", &N, &K);int k1 = K, k2 = K;int ans = K;do{
    k1 = next(N, 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;
}/* 2 1 6 2 99 *//* 9 99 */