循环节的长度,循环节,循环次数(kmp)
2015-08-11 08:52
369 查看
周赛题解
[/code]
循环节的长度,循环节,循环次数(kmp)
我想说这是一道签到题,意思就是本次测试中最水的一道,不过我这样说你真的愿意相信我吗?哈哈,题目是这样的给你一下小数,然后请告诉我分别告诉我这个小数的循环节的循环次数、循环节以及循环节长度输入
输入包括多组测试数据每组测试数据1行,包括一个小数,小数的长度不超过200,小数大于0小于100输出
分别输出这个小数的循环节的长度、循环节以及循环次数,中间以一个空格间隔样例输入
8.6987698769876987 0.666 5.1
样例输出
4 6987 4 1 6 3 1 1 1 [code]#include<stdio.h> #include<string.h> char b[400]; int next[500]; void getnext()//模板 { int l=strlen(b); int i=0,j=-1; next[0]=-1; while(i<l) { if(j==-1||b[i]==b[j]) { i++;j++; next[i]=j; } else j=next[j]; } } int main() { int a,l,i; while(~scanf("%d.%s",&a,b))//输入一个小数用%d.%S的方法便于处理 { l=strlen(b);//循环节大都是从小数点后中出现,所以不用考虑小数点前得 getnext();//得出每个数的next值 if(l%(l-next[l])==0)//说明从开始判断到结束有循环节 { printf("%d ",l-next[l]);//循环节的长度 for(i=0;i<l-next[l];i++) { printf("%c",b[i]);//循环节的组成 } printf(" %d\n",l/(l-next[l]));//循环了几次 } else { printf("%d ",l);//如果没有循环节,字符串的长度就是循环节的长度 for(i=0;i<l;i++) printf("%c",b[i]); printf(" 1\n");//只循环一次 } } return 0; }
[/code]
相关文章推荐
- poj 3009 Curling 2.0
- Yii2.0 集成使用富头像上传编辑器
- php __DIR__ 解释下
- Coursera_程序设计与算法_计算导论与C语言基础_数组应用练习
- 调用webservice时,产生android.os.NetworkOnMainThreadException错误
- Win10怎么显示隐藏文件?Win10显示隐藏文件方法
- 面试题5
- java快速排序
- switch网页框架
- gzip与deflate压缩的区别
- HDU 1052
- hdu4821 String
- [LeetCode] Spiral Matrix
- Android 第三方应用广告拦截实现
- 事物发展总会出人意料
- EasyUI集成Kindeditor使用
- UI之手势识别器 注意
- QPS 与 TPS
- Labeling Balls(POJ--3687
- Gym - 100625E Encoded Coordinates 矩阵快速幂