习题3-4 周期串 UVa455
2016-07-23 17:37
246 查看
算法竞赛入门经典(第2版)第3章 数组和字符串
习题3-4 周期串 UVa455
感悟。
1、直接看英文原题的输入输出样例。
2、没写之前,思路比较复杂,还考虑过递归的方式。
3、写的过程抱着试一试的心里,竟然写出,而且代码还写得漂亮,真是想不到,提交WA,傻了,样例全通过,能找到一些难以通过的样例吗。
abc
3
abca
4
4、提交WA,彻底傻了,代码不可能有问题,搜索http://blog.csdn.net/thudaliangrx/article/details/50699439发现里面有while(t--),排查之下,才发现手中的英文版与网站里的对应不上,如下
手中
网站
5、提交Presentation error,明白离成功不远了,又查网站原题,发现漏了一句
Two consecutive input will separated by a blank
line.
printf("%d\n",k);改成printf("%d\n\n",k);提交Presentation
error,参考http://blog.csdn.net/thudaliangrx/article/details/50699439
改成
printf("%d\n",k);
if(T)
printf("\n");
提交AC,真受不了,核心算法没花什么时间,却在输出格式上费了太多周折。真是服了。
4、该题有着 程序3-2开灯问题 例题3-3回文词 例题3-6环状序列 影子。
附上代码
环境Dev-cpp4.9.9.2
#include <stdio.h>
#include <string.h>
char s[100];
int main(){
int len;
int i;
int flag;
int k;
int T;
scanf("%d",&T);
while(T--){
scanf("%s",s);
len=strlen(s);
flag=0;
k=0;
while(!flag){//没找到周期,继续循环
k++;
flag=1;
for(i=0;i<len;i++){
if(len%k==0){//数组长度必须是周期的整数倍,接下来才有资格判定是否为周期 ,WA时,漏了此条件
if(i+k<len)//判断数组是否越界
flag&=(s[i]==s[i+k]);
}
else{
flag=0;
break;
}
}
}
printf("%d\n",k);
if(T)
printf("\n");
}
return 0;
}
习题3-4 周期串 UVa455
感悟。
1、直接看英文原题的输入输出样例。
2、没写之前,思路比较复杂,还考虑过递归的方式。
3、写的过程抱着试一试的心里,竟然写出,而且代码还写得漂亮,真是想不到,提交WA,傻了,样例全通过,能找到一些难以通过的样例吗。
abc
3
abca
4
4、提交WA,彻底傻了,代码不可能有问题,搜索http://blog.csdn.net/thudaliangrx/article/details/50699439发现里面有while(t--),排查之下,才发现手中的英文版与网站里的对应不上,如下
手中
Sample Input
HoHoHo
Sample Output
2
网站
Sample Input
1 HoHoHo
Sample Output
2
5、提交Presentation error,明白离成功不远了,又查网站原题,发现漏了一句
Two consecutive input will separated by a blank
line.
printf("%d\n",k);改成printf("%d\n\n",k);提交Presentation
error,参考http://blog.csdn.net/thudaliangrx/article/details/50699439
改成
printf("%d\n",k);
if(T)
printf("\n");
提交AC,真受不了,核心算法没花什么时间,却在输出格式上费了太多周折。真是服了。
4、该题有着 程序3-2开灯问题 例题3-3回文词 例题3-6环状序列 影子。
环境Dev-cpp4.9.9.2
#include <stdio.h>
#include <string.h>
char s[100];
int main(){
int len;
int i;
int flag;
int k;
int T;
scanf("%d",&T);
while(T--){
scanf("%s",s);
len=strlen(s);
flag=0;
k=0;
while(!flag){//没找到周期,继续循环
k++;
flag=1;
for(i=0;i<len;i++){
if(len%k==0){//数组长度必须是周期的整数倍,接下来才有资格判定是否为周期 ,WA时,漏了此条件
if(i+k<len)//判断数组是否越界
flag&=(s[i]==s[i+k]);
}
else{
flag=0;
break;
}
}
}
printf("%d\n",k);
if(T)
printf("\n");
}
return 0;
}
相关文章推荐
- Logging in Java
- 剑指offer——从尾到头打印链表节点的值
- 获取当前网络IPv4地址
- POJ 1471 模拟?
- java设计模式之单例模式
- 设计模式六大原则(4):接口隔离原则
- POJ 1471 模拟?
- h5实例-上下滑动页面
- 递归和非递归遍历二叉树
- 聊天IM的时间戳显示规则
- Centos 二进制安装node.js
- TCP建立释放链接的过程
- 编程练习(1)
- AIDL在android系统中的作用
- js显示树形结构,div+css+js
- 漫谈移动开发中的组件化
- Android群英传之Android动画机制与使用技巧
- Java多线程(三) 多线程间的基本通信
- Win10 video dxgkrnl fatal error 怎么处理
- 漫谈移动开发中的组件化