UVa455

UVA455

(笨脑子很难抽象的去想问题,这道题也是,要多加练习)
我的思路:从第一个元素开始,在遇到相同元素,就暂且把这个元素的序列作为最小周期,在循环判断,是否是循环数列,如果不是就退出,并找出下一个符合的最小周期,直到最后都没有退出,则输出这个最小周期。
总结:我的思路总是一步一步进行,但我看到大佬的博客,说的就很简洁:枚举循环节(循环节要能被字符串长度整除),进行循环判断,找到第一组解就是最小解。

先上大佬的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
int t; cin >> t;
char s[85];
while (t--)
{
memset(s, 0, sizeof(s));
scanf("%s", s);
int len = strlen(s);
int j;
for (int i = 1; i <= len; ++i)
if (len%i == 0)
{
for (j = i; j <= len; j++)
if (s[j] != s[j%i])
break;
if (j == len)
{
cout << i << endl;
break;
}
}
if (t)cout << endl;
}
}

再上我的代码,好吧,其实没有代码,虽然我的解释和大佬的解释看上去很不一样,但当我去一步步写自己的代码的时候,发现其实是差不多的。
现在的要提升的就是把自己对题目的理解转化成代码的能力!!!