C - Calculator Conundrum
2015-10-27 19:45
351 查看
uva 11549
题意:你拥有一个老式计算机,它只能显示n为数字,有一天你输入数字k,接着一直平方下去,在这个过程中如果数字长度大于n,那么截取前n个数形成一个新的数k,再用这个新的数k一直平方下去,那么这个过程中能显示的最大数字是多少。
思路:在这个过程如果出现了以前出现过的数,那么从第一个开始到这个数就是一个循环节,后面的也与这个节一模一样,因为都是针对一个数字执行同一种操作。
为了时间复杂度上的考虑,可以使用set判重,耗时2.279s
View Code
题意:你拥有一个老式计算机,它只能显示n为数字,有一天你输入数字k,接着一直平方下去,在这个过程中如果数字长度大于n,那么截取前n个数形成一个新的数k,再用这个新的数k一直平方下去,那么这个过程中能显示的最大数字是多少。
思路:在这个过程如果出现了以前出现过的数,那么从第一个开始到这个数就是一个循环节,后面的也与这个节一模一样,因为都是针对一个数字执行同一种操作。
为了时间复杂度上的考虑,可以使用set判重,耗时2.279s
#include <iostream> #include <cstdio> #include <sstream> #include <set> 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<n) n=l; l--; int ans=0; int c=1; for(int i=0;i<n;i++) { ans=ans*10+a[l--]; } return ans; } int main() { int T; scanf("%d",&T); while(T--) { int n,k; scanf("%d%d",&n,&k); int ans=k; int k1=k,k2=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; }
View Code
相关文章推荐
- 1.viewpager
- UE4 C++使用Multi Theard的教程
- ubb js
- linux awk命令详解
- 致员工:失败?被淘汰?并不是能力不行,而是……
- ArrayList、LinkedList、Vector的区别
- Multi-Threading: How to Create Threads in UE4
- 一次有意思的错选执行计划问题定位(涉及SYS_OP_C2)
- mongodb 3.0.x 添加用户名和密码设置权限
- File Input and Output with R
- LeetCode 100: Same Tree
- An Introduction to UE4 Plugins
- android 屏幕适配的问题
- ContentProvider
- linux sort,uniq,cut,wc命令详解
- IOS开发笔记11-指针(上)
- 周记——20151026
- .NET批量大数据插入性能分析及比较(6.使用表值参数)
- ZOJ 2724 Windows Message Queue(二叉堆||优先队列)
- UE4 Plugins