UVa455

455 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

题意:

       给出一个字符串,找出它的最大循环节字符串长度。

输入:

       情况数T,然后是一个空行,之后每一种情况给一个字符串,相邻两情况间有空行。

输出:

       每种情况输出它的最大循环节字符串长度。

分析:

       简单模拟,编写一个函数检验输入的字符串是否是某个长度的字符串的重复。然后列举输入字符串长度的所有因子,检查字符串是否是为某个因子长度的字符串的重复即可。

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cmath>
 5 using namespace std;
 6 const int MAX_LEN = 80;
 7 char str[90];
 8 bool IS_THIS_STRING_LOOPING_IN_THIS_NUMBER(char str[],int loop_num,int len){
 9     for(int i = 0 ; i < loop_num ; i++)
10         for(int j = i + loop_num ; j < len ; j += loop_num)
11             if(str[i] != str[j]) return false;
12     return true;
13 }
14 int main(){
15     int T; cin >> T;
16     while(T--){
17         int ans;
18         getchar();
19         scanf("%s",str);
20         int len = strlen(str);
21         for(int i = 1 ; i <= len ; i++){
22             if(len % i == 0){
23                 if(IS_THIS_STRING_LOOPING_IN_THIS_NUMBER(str,i,len)){
24                     ans = i;
25                     break;
26                 }
27             }
28         }
29         printf("%d\n",ans);
30         if(T != 0) cout << endl;
31     }
32     return 0;
33 }
View Code

 

posted @ 2016-08-13 23:41  Yan_Bin  阅读(339)  评论(0编辑  收藏  举报