UVa455

题目链接

https://vjudge.net/problem/UVA-455

代码

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    int N; // 测试用例的个数
    char s[100];
    int res;
    scanf("%d", &N);
    while (N--)
    {
        scanf("%s", s);
        int len = strlen(s);
        int cirNum = len / 2 + 1;
        res = 0;
        int flag;
        for (int i = 0; i < cirNum; i++)
        {
            flag = 1;
            res = i + 1;
            for (int j = 0; j < len; j++)
            {
                if (s[j] != s[j % res])
                {
                    flag = 0;
                    break;
                }
            }
            if (flag)
                break;
        }
        if (!flag || (len % res) != 0)
            res = len;
        printf("%d
", res);
        if (N > 0)
            printf("
");
    }

    return 0;
}

image-20201231222843430

按:其实这是一道相对简单的题目,但是我在 VJudge 上提交了四五次都是 WA,然后到 uDebug 上跑测试用例才 debug 出来错误在哪里,那就是,我没有判断最后的结果是可以被字符串的长度 len 给整除!真是的!花了我两个多小时!

不过,机缘巧合,找到了一个比较好的网站,uDebug,来跑 UVa 的用例真是相当合适!

原来我错误的地方就是下面这段代码的 if 语句中少加了一个 (len % res) != 0。

if (!flag || (len % res) != 0)
    res = len;
原文地址:https://www.cnblogs.com/fanlumaster/p/14218866.html