算法竞赛入门经典 5.1.3 周期串

本文介绍了一个简单的C语言程序,用于检测一个字符串是否具有周期性,并找出其最小周期。通过双重循环遍历,程序验证了每个可能的周期是否使得原始字符串能够被正确重复构造。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5.1.3  周期串  

如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。输入一个长度不超过80的串,输出它的最小周期。  

样例输入:HoHoHo 

样例输出:2 


#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char *argv[])
{
  char s[100];  
  scanf("%s", s);
  int len = strlen(s);
  int i;
  for(i = 1; i <= len; i++)
     if(len%i == 0)
     {
        int j, ok = 1;
        for(j = i; j < len; j++)
        {
           if(s[j] == s[j%i]) continue;
           else { ok = 0; break;}
        }      
        if(ok) {printf("%d\n", i); break;};
        
     }
  
  system("PAUSE");	
  return 0;
}

总结  1 strlen不包括最后的空字符

          2 两个循坏里len的边界条件

          3 ok变量的使用及是否是否为周期的判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值