UVa 455 - Periodic Strings(字符串处理)

来源:互联网 发布:touch.js api 中文 编辑:程序博客网 时间:2024/05/05 00:29

今天帮人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 100int 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;}



0 0
原创粉丝点击