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\n", res);
if (N > 0)
printf("\n");
}
return 0;
}
按:其实这是一道相对简单的题目,但是我在 VJudge 上提交了四五次都是 WA,然后到 uDebug 上跑测试用例才 debug 出来错误在哪里,那就是,我没有判断最后的结果是可以被字符串的长度 len 给整除!真是的!花了我两个多小时!
不过,机缘巧合,找到了一个比较好的网站,uDebug,来跑 UVa 的用例真是相当合适!
原来我错误的地方就是下面这段代码的 if 语句中少加了一个 (len % res) != 0。
if (!flag || (len % res) != 0)
res = len;