zoukankan      html  css  js  c++  java
  • 《算法竞赛入门经典》5.13周期串

     1 /*
     2 *如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。
     3 *输入一个长度不超过80的串,输出它的最小周期。
     4 *样例输入:HoHoHo
     5 *样例输出:2
     6 */
     7 #include <stdio.h>
     8 #include <string.h>
     9 
    10 //枚举法
    11 int main()
    12 {
    13     char word[100];
    14     scanf("%s", word);
    15     int len = strlen(word);
    16     for(int i = 1; i <= len; ++i)             //遍历各种可能出现周期1,2,3,4...len
    17     {
    18         int ok = 1;                            //检测字符串是否具有周期性,1表示真
    19         //从周期长度的下一个位置开始与前面周期子串中的字符逐个比较,若出现一个不相等字符,则这个串长到此结束(跳出内循环)
    20         for(int j = i; j < len; ++j)
    21             if(word[j] != word[j % i]) {ok = 0; break; }
    22         if(ok) {printf("%d
    ", i); break; } //找到周期立刻结束(跳出外循环)
    23     }
    24     return 0;
    25 }
    26 /*分析:
    27 *1.len为字符串长度,strlen()不包括最后的空字符;
    28 *2.i记录周期长度,j记录从第二个周期开始字符的位置;
    29 *3.语法:临时定义变量,不属于ANSI C,建议扩展名保存为.cpp;
    30 *4.内循环判断:例如j=4的时候j%i=0,所以word[0]必须要和word[4]相等,以此类推word[1]=word[5],word[2]=word[6]...word[j]!=word[i%j]
    31 *  得出一个周期,然后执行下次循环计算下一个周期。
    32 */
    亲爱的读者:如果觉得本文对你有所帮助,请点击推荐,分享给其他人!
  • 相关阅读:
    古代军队的官的从大到小的排序
    [转]DAO、RDO、ADO、OLE DB 、ODBC and JDB
    JSP页面之间参数传递中文出现乱码
    重置VS2008插件环境
    PB7中调用VC6的DLL
    Visual Studio统计有效代码行数
    php.ini 中文版
    IDEA Plugin JB* Components
    [转]你还在为怎么查看字节码指令而担忧吗?
    战地2, 2142解决Win10运行闪退问题
  • 原文地址:https://www.cnblogs.com/zhuangwei/p/5254873.html
Copyright © 2011-2022 走看看