补题 02 A Long long word

博客详细记录了作者在解决一道编程题(VJudge contest 207402 的问题A)时遇到的错误点和解决方案。从题目来源到WA原因,再到格式陷阱和语言限制,最后讲解了确定字符串周期的思路,即初始化周期为1,逐次检查字符串周期内字符是否相等来确定最小周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:题目来源:https://vjudge.net/contest/207402#problem/A


二:wa点:1.开始N老老实实的打的是80,估计运行过程爆了数组,后来改成了85过了

2.

for(j=0;j+i<len;j++)
开始这一句中我写的是j=i;发现这样会略过str[0],估计是一直wa的原因

3.格式方面:这个格式是真的坑,开始我理解的是输入之间有空行,先输入所有的字符串,输出的时候再一起输出。(为此还特地开了一个数组存对应每个字符串的周期……)结果发现格式是每组样例之间有空行,最后一组结尾没空行。

4.开始用c写交的时候提示c不能用c++的格式这样写,所以用c++又写了一次

	char str[N]={0};

三:思路:

  先设定周期为1,然后在确保字符串中元素个数能被周期整除的情况下,分别检测字符串中每过一个周期对应的元素是否相等。如果有不相等的,就周期加1;如果全部都相等,就跳出循环,并输出周期的值

四:题解:

#include<iostream>
#include<algorithm>
#include<cstring>
#define N 85
using namespace std;

int main() 
{
    int n,i,j;
    cin>>n;
    while(n--)
    {
    	char str[N]={0};//contrast字符串用于比较
		int len;//numm数组用来储存每个字符串的周期 
    	cin>>str;
        len=strlen(str);
        for(i=1;i<len;i++)//i为周期 
        {
        	j=0;
            if(len%i==0)//字符串的周期必须能整除
		    {
				for(j=0;j+i<len;j++)
		        {
					if(str[j]!=str[j+i]) 
		        	    break;
				}
			}
			if(j+i==len)
			    break;
        }
        if(n!=0)
	    	cout<<i<<endl<<endl;
	    else
	     	cout<<i<<endl;  
        
    }
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值