Calculator Conundrum UVA
来源:互联网 发布:mybatis sql打印 编辑:程序博客网 时间:2024/06/07 15:20
Calculator Conundrum
UVA - 11549题意:有个老式计算器,每次只能记住一个数字的前n位。现在输入一个整数k,然后反复平方,一直做下去,能得到的最大数是多少。例如,n=1,k=6,那么一次显示:6,3,9,1...
思路:这个题一定会出现循环,所以一个个模拟,遇到相同的就再之前所有数中找最大的输出即可。
怎么判断遇到相同的呢?如果装在数组里一一比较显然很慢,如果用v[k]判断k是否出现过,k范围太大空间不够用。
方法1.使用set:
code:
#include <iostream>#include <set>using namespace std;int T,n,k;int Next(int x){//求平方后的数 if(!k)return 0;//如果k一开始为0,平方后都是0 int buf[20],i = 0; long long t = (long long)x*x;//平方 while(t){ buf[i++] = t%10; t /= 10; }//把每一位储存到数组中(注意这样是倒着的) int ans = 0; int j; for(j = 1; j <= min(n,i); j++) ans = ans*10 + buf[i-j];//从高位开始求n位的数 return ans;}int main(){ cin >> T; while(T--){ cin >> n >> k; set<int>S; while(!S.count(k)){//利用Set集合判断,因为set不能重复且有序 S.insert(k); k = Next(k); } cout << *(--S.end()) << endl; } return 0;}
方法二:floyd判圈法
算法描述
如果有限状态机、迭代函数或者链表存在环,那么一定存在一个起点可以到达某个环的某处(这个起点也可以在某个环上)。
初始状态下,假设已知某个起点节点为节点S。现设两个指针t和h,将它们均指向S。
接着,同时让t和h往前推进,但是二者的速度不同:t每前进1步,h前进2步。只要二者都可以前进而且没有相遇,就如此保持二者的推进。当h无法前进,即到达某个没有后继的节点时,就可以确定从S出发不会遇到环。反之当t与h再次相遇时,就可以确定从S出发一定会进入某个环,设其为环C。
如果确定了存在某个环,就可以求此环的起点与长度。
模板样例:void solve() { read_case(); int ans = k; int count = 0; int k1 = k, k2 = k; do { k1 = next(n, k1); k2 = next(n, k2); if(k2 > ans) ans = k2; k2 = next(n, k2); if(k2 > ans) ans = k2; //count++; //算出循环节 }while(k1 != k2); printf("%d\n", ans); //printf("%d\n", count); }
code:
#include <iostream>#include <set>using namespace std;int T,n,k;int Next(int x){//求平方后的数 if(!k)return 0;//如果k一开始为0,平方后都是0 int buf[20],i = 0; long long t = (long long)x*x;//平方 while(t){ buf[i++] = t%10; t /= 10; }//把每一位储存到数组中(注意这样是倒着的) int ans = 0; int j; for(j = 1; j <= min(n,i); j++) ans = ans*10 + buf[i-j];//从高位开始求n位的数 return ans;}int main(){ cin >> T; while(T--){ cin >> n >> k; int ans = max(k,Next(k)); int k1 = k,k2 = Next(k); while(k1 != k2){ k1 = Next(k1); k2 = Next(k2); if(k2 > ans) ans = k2; k2 = Next(k2); if(k2 > ans) ans = k2; } cout << ans << endl; } return 0;}
阅读全文
0 0
- Uva-11549 - Calculator Conundrum
- UVA 11549 Calculator Conundrum
- Uva-11549-Calculator Conundrum
- uva 11549 - Calculator Conundrum
- UVA 11549 Calculator Conundrum
- uva 11549 CALCULATOR CONUNDRUM
- UVA 11549 Calculator Conundrum
- UVa 11549 - Calculator Conundrum
- UVA 11549 Calculator Conundrum
- UVA 11549 Calculator Conundrum
- UVA - 11549 Calculator Conundrum
- UVA-11549 Calculator Conundrum
- UVa:11549 Calculator Conundrum
- UVA 11549 - Calculator Conundrum
- UVA 11549 Calculator Conundrum
- UVA 11549 Calculator Conundrum
- uva-CALCULATOR CONUNDRUM
- UVA - 11549 Calculator Conundrum
- hadoop各模块含义及对应的配置
- smali语法
- 易生金服牵手重庆航投旅游基金,海航集团负债率或将再降低
- friday
- 《设计模式》学习笔记5——单例模式【高并发拓展】
- Calculator Conundrum UVA
- 用stc12c5a60s2单片机的PCA寄存器输出PWM波,通过MX214B芯片控制直流电机
- Java 作业 1118/1119
- RPC
- 企业中ip地址的规划
- Spring boot+slf4j日志级别
- LINUX学习——LINUX文件结构
- 83. Remove Duplicates from Sorted List
- 非局部神经网络(Non-local Neural Networks)