博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 11549 Calculator Conundrum
阅读量:6195 次
发布时间:2019-06-21

本文共 1304 字,大约阅读时间需要 4 分钟。

uva 11549

 

题意:你拥有一个老式计算机,它只能显示n为数字,有一天你输入数字k,接着一直平方下去,在这个过程中如果数字长度大于n,那么截取前n个数形成一个新的数k,再用这个新的数k一直平方下去,那么这个过程中能显示的最大数字是多少。

思路:在这个过程如果出现了以前出现过的数,那么从第一个开始到这个数就是一个循环节,后面的也与这个节一模一样,因为都是针对一个数字执行同一种操作。

为了时间复杂度上的考虑,可以使用set判重,耗时2.279s

#include 
#include
#include
#include
using namespace std;int next(int n,int k){ stringstream ss; ss<< (long long)k*k; string c; c=ss.str(); string cc=c.substr(0,n); stringstream s(cc); int ans; s>>ans; return ans;}int main(){ int T; scanf("%d",&T); while(T--) { set
dic; int n,k; scanf("%d%d",&n,&k); int ans=k; while(!dic.count(k)) { dic.insert(k); ans=max(ans,k); k=next(n,k); } printf("%d\n",ans); } return 0;}
View Code

以上程序的主要时间耗费在使用了sstream与循环体本身,空间耗费在set上,可以改成使用数组和floy判圈算法,时间耗费0.193s

#include 
#include
#include
#include
using namespace std;int a[100];int next(int n,int k){ long long k2=(long long) k*k; int l=0; while(k2) { a[l++]=k2%10; k2/=10; } if(l
View Code

 

转载于:https://www.cnblogs.com/zsyacm666666/p/4915337.html

你可能感兴趣的文章
编写更高效的 lua 代码(转载)
查看>>
UniversalImageLoader 学习
查看>>
NWU CCCC 1017(HDU 1272改编 并查集判断图是否存在环)
查看>>
HDU 5785 Interesting
查看>>
logistic分类
查看>>
遍历分区大小
查看>>
Frobenius norm(Frobenius 范数)
查看>>
IO流文件字符输入输出流,缓冲流
查看>>
Entity Framework学习
查看>>
两个XML文件进行对比
查看>>
C++学习01
查看>>
Flappy Bird 源码走读
查看>>
UVA - 11995 模拟
查看>>
angularjs过滤器(一)------禁止转载------
查看>>
图表(Chart & Graph)你真的用对了吗?
查看>>
自定义实现复选框
查看>>
4月25上午及补交4月24号作业
查看>>
java 关键字this super
查看>>
测试代码的方法
查看>>
Unsupported major.minor version 52.0
查看>>