説明
文字列が長さkの文字列が何回も繰り返されることができるならば、サイクルがkであることを文字列と呼ばれます。例えば、サイクル3では、文字列「abcabcabcabc」(もちろん、彼はまた6,12サイクル、など)。
今、あなたは、もはや80の文字列よりも最小期間を求めているように、プログラムを書きます。入力最初の入力整数n、データのn組の代表。
行毎のデータの各セットは、弦80の長さ以下です。
隣接する二つの入力の間に空白行があります。出力された出力データ列内の各整数k、文字列の最小の期間を表します。
隣接する二つの出力の間に空白行があるはずです。
今、あなたは、もはや80の文字列よりも最小期間を求めているように、プログラムを書きます。入力最初の入力整数n、データのn組の代表。
行毎のデータの各セットは、弦80の長さ以下です。
隣接する二つの入力の間に空白行があります。出力された出力データ列内の各整数k、文字列の最小の期間を表します。
隣接する二つの出力の間に空白行があるはずです。
サンプル入力
2 ABCABCABC HoHoHoサンプル出力
3 2
解答:
の#include <iostreamの>
する#include <CStringの>
する#include <cstdioを>
使用して名前空間std。
チャーS [100]。
INTのL、N。
INT解く()
{
ブールB = 1。
memsetの(S、0、はsizeof(S))。
scanf関数( "%sの"、&S)。
L = 0。
一方、(S [L] = 0!)Lを++。
以下のために(INT i = 1; iは= Lを<; iは++)//长度
{
IF(1%I == 0)
{
B = 1。
(INT J = 0; J <L; J + = i)に対する
{
int型K。
用(K = 0; K <iは、++ K)
{
IF(!S [J + K] = sの[K])
{
B = 0。
ブレーク;
}
}
もし、(B == 0)ブレーク。
}
IF(B == 1)リターンI。
}
}
0を返します。
}
int型のmain()
{
scanf関数( "%のD"、&N);
(N--)一方
{
INT ANS。
ANS =(解きます)。
もし(!N = 0)のprintf( "%d個の\ nは\ n"は、ANS)。
他のprintf( "%d個の\ n"は、ANS)。
}
}