UVA455

UVA455

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

先上大佬的代码

#include
#include
#include
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;
    }
}

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

你可能感兴趣的:(UVA)