算法竞赛入门经典-习题3-4 周期串(Periodic Strings, UVa455)
2017-06-03 10:05
351 查看
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。 例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。
输入一个长度不超过80的字符串,输出其最小周期。
#include<stdio.h>
#include<string.h>
int main()
{
int k = 1;
char s[100];
scanf("%s",s);
int len = strlen(s);
int flag = 0;
//没找到k时
for(k = 1; k <= len && flag == 0; k++)
{
if(len % k != 0)
//满足k整除len
continue;
flag = 1;
//假设此时k是周期
for(int i = 1; i < (len / k); i++)
//分成len/k个小段,验证每个小段是否相同
{
for(int j = 0; j < k; j++)
//在每小段中逐位验证
{
if(s[i*k+j] != s[j])
{
flag = 0;
//此时k不是周期,不必再检查其他位
break;
}
}
if(!flag)
//此时k不是周期,不必再检查其他段
break;
}
}
printf("%d\n",k-1);
return 0;
}
输入一个长度不超过80的字符串,输出其最小周期。
#include<stdio.h>
#include<string.h>
int main()
{
int k = 1;
char s[100];
scanf("%s",s);
int len = strlen(s);
int flag = 0;
//没找到k时
for(k = 1; k <= len && flag == 0; k++)
{
if(len % k != 0)
//满足k整除len
continue;
flag = 1;
//假设此时k是周期
for(int i = 1; i < (len / k); i++)
//分成len/k个小段,验证每个小段是否相同
{
for(int j = 0; j < k; j++)
//在每小段中逐位验证
{
if(s[i*k+j] != s[j])
{
flag = 0;
//此时k不是周期,不必再检查其他位
break;
}
}
if(!flag)
//此时k不是周期,不必再检查其他段
break;
}
}
printf("%d\n",k-1);
return 0;
}
相关文章推荐
- 算法竞赛入门经典 习题3-3乘积的末3位
- {算法竞赛入门经典}第二章 习题解答及例题小结
- 算法竞赛入门经典:第五章 基础题目选解 5.3 周期串
- 【算法竞赛入门经典】【第二章】课后习题
- 算法竞赛入门经典第五章习题
- 算法竞赛入门经典第二章习题解答
- 算法竞赛经典入门第三章习题
- 算法竞赛入门经典 习题2-10 排列(permutation)
- 【算法竞赛入门经典】【第三章】课后习题(第二部分)
- 算法竞赛入门经典习题集
- 算法竞赛入门经典 习题2-10排列数字1~9形成1:2:3的等比数列
- 算法竞赛入门经典 习题笔记
- 【算法竞赛入门经典】【第一章】课后习题
- 算法竞赛入门经典:习题3-8 手机键盘(keyboard)
- 算法竞赛入门经典 习题3-7 n进制转十进制
- 算法竞赛入门经典 3-3 乘积的末三位 习题 3-4 计算器 习题3-5 旋转
- 刘汝佳算法竞赛入门经典 第四单元习题答案自编
- 算法竞赛入门经典 5.1.3 周期串
- 「算法竞赛入门经典 第二版」第 1、2章 循环结构程序设计 习题解答
- 算法竞赛入门经典习题解答(2)