zoukankan      html  css  js  c++  java
  • 【C/C++】习题3-4 周期串/算法竞赛入门经典/数组和字符串

    【题目】
    如果某个字符串可以由长度为k的字符串重复多次得到,则称该串以k为周期。
    输入一个长度不超过80的字符串,输出最小周期。
    【思路】
    暴力求解。依次考察周期1~长度n。
    筛选:周期一定是长度n的约数。n%i == 0
    考察形式:周期为i,比较后面的每个周期位置和i周期之内的是否一一相等。
    a[j]==a[j%i]? //后者为周期内的值
    【代码】

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    const int maxn = 85;
    char a[maxn]; 
    
    int main()
    {
        memset(a,0,sizeof(a));
        scanf("%s",a);
        int n = strlen(a);
        int flag = 1;
        printf("%s
    ",a);
        printf("%d
    ",n);
        for (int i = 1; i <= n; i++) //考察所有小于长度的数i是否可能是周期
        {
            //字符串长度一定是周期的倍数
            //printf("1 %d
    ",flag);
            if(n%i != 0) flag = 0;
            else
            {
                for (int j = i; j < n; j++)
                {
                    if(a[j]!=a[j%i]) flag = 0; break; //这里可以加上可以提高效率
                }
            }
            //如果循环了一遍还有的话
            //printf("2 %d
    ",flag);
            if(flag)
            {
                printf("min period %d", i);
                break;
            }
            else
            {
                printf("not periodic
    ");
            }
            flag = 1;
        }
        system("pause");
    }
    
    
    
  • 相关阅读:
    Codeforces Round #319 (Div. 2) D
    因为网络请求是 异步的,
    ios真蛋疼,
    单例模式的两种实现,
    jump, jump,
    一点 误删,
    关于代理,
    button上的两个手势,
    数据,
    header 的蓝色,
  • 原文地址:https://www.cnblogs.com/kinologic/p/13952781.html
Copyright © 2011-2022 走看看