Periodic Strings UVA - 455--卡bug

首先,对这道题进行评价:有毒;

我一开始没有考虑到一种情况,只考虑了重复。即先第一个与第二个比较。后来第一个与第三个比较,第二个与第四比较。直到找到。但他有bug,那就是他不是重复。最后出现了bbabb。在此我看了c站的一篇博主的,让我找到了一个有效UVA刷题的网站,那就是:

https://www.udebug.com/UVa/455

有许多大佬的网站,对于他们的贡献只能说:”谢谢!”

最后我考虑了许多,在下面的评论中找到了环状周期法,下列是两种解法,一种是我自己对于这个方法的理解。另一种是我对与大佬提供的代码的理解并将其搞成了C语言;

上代码:

#include<stdio.h>
#include<string.h>
int main(){
	int n;
	scanf("%d",&n);
	int i;
	char a[1000],b[1000],c[1000];
	for(i=0;i<n;i++){	
	scanf("%s",a);
	int count=strlen(a);
	int j,k,sum=1,x=0;
	int flag=0;
	while(count/sum>1){
		x=0;
	for(k=count-sum;k<count;k++){
		b[x]=a[k];
		x++;
	}b[x]='\0';
	for(j=0;j<count-sum;j++){ 
		b[x]=a[j];
		x++;
}b[x]='\0';
if(!strcmp(a,b)&&count%sum==0){
	if(i!=n-1){
		printf("%d\n\n",sum); 
	}
	else{
		printf("%d\n",sum);
	}
	flag=1;
	break;
}sum++;
}
if(flag==0){
	if(i!=n-1){
		printf("%d\n\n",count); 
	}
	else{
		printf("%d\n",count);
	}
}
}
	return 0;
}

大佬代码:

#include<stdio.h>
#include<string.h>
int main(){
	int n,s;
	scanf("%d",&n);
for(s=0;s<n;s++){
		char a[1000];
		int i,j,k,t=1;
		scanf("%s",a);
		int len=strlen(a);
		while(1){
			int c=0;
		for(i=0;i<len;i++){
			if(a[i]==a[(t+i)%len]){
				c++;
			}
		}
		if(c==len)
		break;
		t++;
		}
		if(s!=n-1){
			printf("%d\n\n",t);
		}
		else{
			printf("%d\n",t);
		}
	} 
	return 0;
}

主要是对于求t;

当t=1是,a[0] compare a[1],a[1]比a[2].........主要是解决不重复问题;

t=2之后是解决重复问题;

当然,这个题目有毒之处在于其输出,UVA的题都好奇怪,输入没问题,输出没到最后一行都是\n\n;到了最后一个就是\n;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值