今天帮人Debug,实在看不懂他写的什么,就重写了一份给他。感觉学了这么久之后,再写这种水题轻松加随意,写得也比之前的好了。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include<stdio.h> #include<string.h> int t; char s[90]; int main(){ scanf("%d",&t); while(t--){ scanf("%s",s); int i,n=(int)strlen(s); for(i=1;i<n;++i){ if(n%i) continue; int ok=1,j=0,k=0; for(;j<n&&ok;k%=i) if(s[j++]!=s[k++]) ok=0; if(ok) break; } printf("%d\n",i); if(t) printf("\n"); } return 0; }
|
从昨天晚上开始做的,今天终于Ac了。题目是让输出输入的字符串的最小周期。开始使用了数组,当字符长度为n时,i从n-1开始自减,n%i=0时,建立数组a[ i][ n/i ];判断数组中对应值是否相等来输出i。可总是出问题,于是后来放弃数组,改为用j%i表示昨天数组中对应的值,并且使用x,y两个变量来限制多余的循 环,提交一次就Ac了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include <stdio.h> #include <string.h> #define maxn 100 int main() { int T,n,i,j,x,y; scanf("%d",&T); char s[maxn]; while(T--) { y=0; scanf("%s",s); n=strlen(s); for(i=1;i<=n;i++) { if(n%i==0) { x=1; for(j=i;j<n;j++) { if(x==0) break; if(s[j]!=s[j%i]) x=0; } if(x) y=i; } if(y) break; } if(T) printf("%d\n\n",y); else printf("%d\n",y); } return 0; }
|
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **