UVA 455 - Periodic Strings

本文介绍了一个编程问题,即如何确定一个字符字符串的最小周期。通过分析输入字符串并检查其重复模式来解决这个问题。文章提供了完整的代码实现,展示了如何读取多个测试用例,并为每个测试用例找到并输出其最小周期。

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

A character string is said to have period k if it can be formed by concatenating one or more repetitions of another string of length k. For example, the string "abcabcabcabc" has period 3, since it is formed by 4 repetitions of the string "abc". It also has periods 6 (two repetitions of "abcabc") and 12 (one repetition of "abcabcabcabc").

Write a program to read a character string and determine its smallest period.

Input

The first line oif the input file will contain a single integer N indicating how many test case that your program will test followed by a blank line. Each test case will contain a single character string of up to 80 non-blank characters. Two consecutive input will separated by a blank line.

Output

An integer denoting the smallest period of the input string for each input. Two consecutive output are separated by a blank line.

Sample Input

1

HoHoHo

Sample Output

2


#define RUN
#ifdef RUN

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


int main() {

#ifndef ONLINE_JUDGE
	freopen("455.in", "r", stdin);
	freopen("455.out", "w", stdout); 
#endif

  int n;
  char word[100];
  

  scanf("%d", &n);
  getchar();

  for(int k=0; k<n; k++){
	  getchar();
	  memset(word, 0, sizeof(word));
	  scanf("%s", word);
	  int len = strlen(word);
	  for (int i = 1; i <= len; i++){
		  if (len % i == 0) {	// 符合条件的必能被i整除
			  int ok = 1;
			  for (int j = i; j < len; j++){
				  if (word[j] != word[j % i]){
					  ok = 0;
					  break;
				  }
			  }
			  if (ok) {
				  printf("%d\n", i);
				  break;
			  }
		  }
	  }
	  if(k != n-1){
		printf("\n");
	  }

  }

  

  return 0;
}


#endif


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值