uva 445

你想想,如果这个串的长度,本身是个质数,例如:7,那么我们肯定可以说,这个串一定,要么是用 1 循环,要么用 本身最长(7)循环,我们所以知道,这题从找因数入手。

好,我们一旦找到了一个因数,比如,长度是 8,我们第一个找到 1,于是,1 和 2,3,4,5,6,7,8 位置的比较,1必须它们都相同,否则找下一个因数

                                                                                第二个找到     2,于是// 1,2// 位置 和  // 3,4 //5,6//7,8// 一组一组比较,必须完全匹配,

                                                                                 以此类推

代码如下:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     int n;
 5     cin>>n;
 6     while(n--){
 7         string s;
 8         cin>>s;
 9         int len=s.size();
10         for(int i=1;i<=len;i++)
11         {
12             int flag=1;
13             if(len%i==0)
14             {
15                 for(int j=i;j<len;j++){ 
16                     if(s[j%i]!=s[j])
17                     {
18                         flag=0;
19                         break;
20                     }
21                 }
22                 if(flag==1)
23                 {
24                     cout<<i<<endl;
25                     break;
26                 }
27             }
28         }
29     if(n) cout<<endl;
30     }
31 }

 注意不是最后一组的话,打个换行。

原文地址:https://www.cnblogs.com/3532gll/p/9400339.html