博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
南阳329--循环小数(Kmp)
阅读量:6177 次
发布时间:2019-06-21

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

 循环小数

时间限制:
3000 ms  |  内存限制:65535 KB
难度:
1
 
描述

我们可爱的 c小加 近段儿正在潜心研究数学,当他学习到循环小数这一部分时不是太明白循环体是什么意思(比如说3.23232323的循环体是23、2323、23232323),假设我们现在的循环小数都是严格循环的并且有限的,也就是说不出现2.16666666(循环体为6,长度为1)的情况,只有123123这样的循环出现。给他一个小数,他需要找出最小循环体的长度、循环体和循环的次数,请你帮他解决这个问题。

 
输入
输入的第一行是t,表示有t组测试数据(t<=100)。
随后的t行,每行都是一个小于10并且大于0的小数(总长度<=200)。
输出
对每组输入,输出结果单独成行,输出最小循环体的长度、循环体和出现循环的次数。
样例输入
38.69876987698769870.6665.1
样例输出
4 6987 41 6 31 1 1
来源
上传者
做了这么多Kmp, 还是思路不清晰。
ac:
1 #include 
2 #include
3 #include
4 using namespace std; 5 char a[220], b[220]; int p[220], lena, k; 6 void Getp() 7 { 8 int i = 0, j = -1; 9 p[i] = j;10 while(i < k)11 {12 if(j == -1 || b[i] == b[j])13 {14 i++; j++;15 p[i] = j;16 }17 else18 j = p[j];19 }20 }21 int main()22 {23 int t;24 scanf("%d", &t);25 while(t--)26 {27 int i;28 scanf("%s", a);29 lena = strlen(a); 30 for(i = 0; i < lena; i++)31 {32 if(a[i] == '.')33 {34 i += 1;35 break;36 }37 }38 // printf("%d\n", i);39 k = 0;40 for(; i < lena; i++)41 b[k++] = a[i];42 // printf("%d\n", k);43 Getp();44 printf("%d ", k - p[k]);45 for(i = 0; i < k - p[k]; i++)46 printf("%c", b[i]);47 printf(" ");48 printf("%d\n", k/(k-p[k])); 49 }50 return 0;51 }

 

转载于:https://www.cnblogs.com/soTired/p/4713840.html

你可能感兴趣的文章
浅析Java NIO
查看>>
企业级 SpringBoot 教程 (一)构建第一个SpringBoot工程
查看>>
学习云计算技术前景在哪里?云计算技术发展趋势
查看>>
干货|比特币如何产生与交易
查看>>
前端处理后端接口传递过来的图片文件
查看>>
react中的可控组件与非可控组件
查看>>
回调函数
查看>>
Android基础—四大组件之Activity
查看>>
Nginx 学习笔记
查看>>
你为什么选择程序员这个职业?
查看>>
[译] 用于 iOS 的 ML Kit 教程:识别图像中的文字
查看>>
InnoDB大数据插入的优化和FULLTEXT索引性能优化的调研
查看>>
chrome 73 以及之后的版本上安装crx插件出现「程序包无效 CRX_HEADER_INVALID」的报错解决办法...
查看>>
笔试记录集
查看>>
NoSQL Manager for MongoDB破解
查看>>
ViewPager+滑动条显示
查看>>
Load和initialize方法
查看>>
js自定义Android端手势事件
查看>>
spring boot 实现监听器、过滤器、全局异常处理
查看>>
工程师、产品经理、数据工程师是如何一起工作的?
查看>>