例题3-4 周期串

UVA - 455
Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu

Description


 
 Periodic Strings 

A character string is said to have period k if it can be formed by concatenating one or more repetitions of another string of length k. For example, the string "abcabcabcabc" has period 3, since it is formed by 4 repetitions of the string "abc". It also has periods 6 (two repetitions of "abcabc") and 12 (one repetition of "abcabcabcabc").

 

Write a program to read a character string and determine its smallest period.

 

Input

The first line oif the input file will contain a single integer N indicating how many test case that your program will test followed by a blank line. Each test case will contain a single character string of up to 80 non-blank characters. Two consecutive input will separated by a blank line.

 

Output

An integer denoting the smallest period of the input string for each input. Two consecutive output are separated by a blank line.

 

Sample Input

 

1

HoHoHo

Sample Output

2

写一下感想吧

实际上这个题是十分简单的  因为数据比较小所以 我们开始从1 假设  该周期    现在 假设该周期 为     i       字符串的长度 为       l       最外面的 一层循环代表的  用 i为变量  里面的 再来一层循环  分别  按照周期为 i 进行对整个字符串的比较   按照固定的距离 进行 一个个单词的对比    如果只是这样的话 那么就有麻烦了     例如  输入的是   aba   这时候  程序判定循环的周期是   2  很明显 因为 b  没有 对照   周期是一定可以  整除  字符串长度的 所以 设置  一个 关卡 就是   必须让周期可以整除  字符串长度       当整除字符串  长度的时候     就鞥做到每个单词一一进行比较的  效果了  . 

 1  #include<stdio.h>
 2  #include<string.h>
 3  int main()
 4  {
 5      char a[100];
 6      int i,j,m,n,l;
 7      scanf("%d",&n);
 8      while(n)
 9      {
10          scanf("%s",a);    //一会 试试  gets   这样的话 还能避免万一有空格的陷阱
11          l=strlen(a);
12          for(i=1;i<=l;i++)      //  i 代表 最小循环节
13          {
14              if(l%i!=0)
15                 continue;
16              for(j=0;j+i<l;j++)
17              {
18                  if(a[j]!=a[j+i])
19                     break;
20              }
21              if(j+i==l)
22              {
23                  printf("%d\n",i);
24                 if(n!=1)
25                     printf("\n");
26                  break;
27              }
28          }
29          n--;
30      }
31  }

 

转载于:https://www.cnblogs.com/A-FM/p/5217705.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值