1079 -- 周期串

本文介绍了一种求解周期串最小周期的有效算法,并通过示例详细解释了如何判断一个字符串是否具有特定长度的周期性特征。对于长度不超过80的输入字符串,该算法能够快速找到其最小周期。

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

周期串

Time Limit:1000MS  Memory Limit:65536K
Total Submit:119 Accepted:38

Description

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

Input

连续输入一个长度不超过80的字符串。

Output

输出它的最小周期并换行。

Sample Input

HoHoHo
HelloHello

Sample Output

2
5

Source

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace AK1079 {
        class Program {
            static void Main(string[] args) {
                string s;
                while ((s = Console.ReadLine()) != null) {
                    int t = 0;
                    bool falg = true;
                    for (int i = 1; i <= s.Length; i++) {
                        if (s.Length % i == 0 && falg) {
                            string sb = s.Substring(0, i);
                            int j = 0;
                            for (j = i; j < s.Length; j += i) {
                                string temp = s.Substring(j, i);
                                if (temp != sb) {
                                    break;
                                }
                            }
                            if (j == s.Length) { t = i; falg = false; break; }
                        }
                    }
                    Console.WriteLine(t);
                }
            }
        }
    }


#include <stdio.h> #include <math.h> main() { FILE* File_yuanlai, * File_mubiao; // 声明文件指针,用于打开和处理图像文件。 unsigned char tuxiang[256][256]; int i, j, k; char mubiao[200], yuanlai[200]; long int gao, kuan, toubu[2000], neicun; // 请求用户输入原图像和目标图像的文件名。 printf("请输入原来图像的路径:\n"); scanf("%s", yuanlai); printf("请输入目标图像的路径:\n"); scanf("%s", mubiao); // 打开原图像文件。 if ((File_yuanlai = fopen(yuanlai, "rb")) == NULL) { printf("无法打开原图像!\n"); return (0); // 如果打开失败,则退出程序。 } // 打开目标图像文件。 if ((File_mubiao = fopen(mubiao, "wb")) == NULL) { printf("无法打开目标图像!\n"); return (0); // 如果打开失败,则退出程序。 } // 读取原图像文件的宽度。 fseek(File_yuanlai, 18L, SEEK_SET); fread(&kuan, 4, 1, File_yuanlai); printf("原图像文件宽度:%ld\n", kuan); // 读取原图像文件的高度。 fseek(File_yuanlai, 22L, SEEK_SET); fread(&gao, 4, 1, File_yuanlai); printf("原图像文件高度:%ld\n", gao); // 读取原图像文件的大小。 fseek(File_yuanlai, 2L, SEEK_SET); fread(&neicun, 4, 1, File_yuanlai); printf("原图像文件内存:%d\n", neicun); // 保存文件头信息。 for (k = 0; k < 1079; k++) { fseek(File_yuanlai, k, SEEK_SET); fread(&toubu[k], 4, 1, File_yuanlai); } printf("文件头信息:%ld\n", toubu[10]); // 初始化图像数组。 for (i = 0; i < 256; i++) for (j = 0; j < 256; j++) { tuxiang[i][j] = 0; } // 读取原图像文件的像素数据到二维数组里。 fseek(File_yuanlai, 1079L, SEEK_SET); for (i = 0; i < gao; i++) for (j = 0; j < kuan; j++) fread(&tuxiang[i][j], 1, 1, File_yuanlai); ////作业一:在图像中画一个十字架 //int center = 256 / 2, color; //printf("请输入0-255之间你最喜欢的一个数字:\n"); //挑选十字架的颜色 //scanf("%d", &color); //if (color > 255 || color < 0) { // color = 0; // printf("你真坏!给的数字超出了范围,给你黑色吧!\n"); //} //for (int y = 0; y < 256; y++) { // 绘制十字架 // for (int x = 0; x < 256; x++) { // if (x == center || y == center) { // tuxiang[y][x] = color; // } // } //} // 将文件头信息写入目标图像文件。 for (k = 0; k < 1079; k++) { fwrite(&toubu[k], 1, 1, File_mubiao); } //// 将原图像数据写入目标图像文件。 //for (i = 0; i < gao; i++) { // for (j = 0; j < kuan; j++) { // fwrite(&tuxiang[i][j], 1, 1, File_mubiao); // } //} // 关闭所有打开的文件。 fclose(File_mubiao); fclose(File_yuanlai); // 程序结束。 return 0; }简要说明这代码的结构体与文件说明
03-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值