今天帮人Debug,实在看不懂他写的什么,就重写了一份给他。感觉学了这么久之后,再写这种水题轻松加随意,写得也比之前的好了。
代码如下:
#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了。
#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; }