[2016-03-19][UVA][11549][Calculator Conundrum]
Posted 红洋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[2016-03-19][UVA][11549][Calculator Conundrum]相关的知识,希望对你有一定的参考价值。
时间:2016-03-19 21:27:43 星期六
题目编号:[2016-03-19][UVA][11549][Calculator Conundrum]
题目大意:给定数k每次取前n位不断平方,求出现的最大值是多少
方法:
- 方法1:模拟一遍过程,直到出现循环
- 方法2:Floyd判断算法,定义两个k,每次k1走一次,k2走两次,知道k1,k2相同
方法1:STL超级暴力方法
方法2:小小优化版
方法3:Floyd判圈算法
方法1:STL超级暴力方法
#include <set>
#include <sstream>
#include <string>
#include <cstdio>
using namespace std;
typedef long long LL;
int t,n,k,ans;
int mnxt(){
stringstream ss;
ss<<(LL) k * k;
string str = ss.str();
if(str.length() > n) str = str.substr(0,n);
int num = 0;
stringstream ss2(str);
ss2>>num;
return num;
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&k);
set<int> s;
ans = k;
while(!s.count(k)){
s.insert(k);
if(k > ans) ans = k;
k = mnxt();
}
printf("%d\n",ans);
}
return 0;
}
方法2:小小优化版
#include <cstdio>
#include <set>
#include<algorithm>
using namespace std;
typedef long long LL;
#define FOR(x,y,z) for(int (x)=(y);(x)<(z);++(x))
int t,n,k,ans,buf[20];
int mnxt(){
if(!k) return 0;
LL k2 = (LL)k*k;
int cnt = 0;
while (k2){
buf[cnt++] = k2 % 10;
k2 /= 10;
}
int tmpn = min(n,cnt);
FOR(i,0,tmpn){
k2 = k2 * 10 + buf[--cnt];
}
return k2;
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&k);
set<int> s;
ans = k;
while(!s.count(k)){
s.insert(k);
if(k > ans) ans = k;
k = mnxt();
}
printf("%d\n",ans);
}
return 0;
}
方法3:Floyd判圈算法
#include <cstdio>
#include<algorithm>
using namespace std;
typedef long long LL;
#define FOR(x,y,z) for(int (x)=(y);(x)<(z);++(x))
int t,n,ans,buf[20],k1,k2;
int mnxt(int k){
if(!k) return 0;
LL k2 = (LL)k*k;
int cnt = 0;
while (k2){
buf[cnt++] = k2 % 10;
k2 /= 10;
}
int tmpn = min(n,cnt);
FOR(i,0,tmpn){
k2 = k2 * 10 + buf[--cnt];
}
return k2;
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&k1);
k2 = ans = k1;
do{
k1 = mnxt(k1);
k2 = mnxt(k2); if(k2 > ans) ans = k2;
k2 = mnxt(k2); if(k2 > ans) ans = k2;
}
while(k1 != k2);
printf("%d\n",ans);
}
return 0;
}
以上是关于[2016-03-19][UVA][11549][Calculator Conundrum]的主要内容,如果未能解决你的问题,请参考以下文章
uva 11549 Calculator Conundrum