uva455 Periodic Strings

題目:算出字符串最短循環節

注意:自己的方法多次WA,最後參考了一下,主要是循環節處的循環要注意

#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;

int main(int argc, char *argv[])
{
    int N = 0;
    char word[100];
    scanf("%d", &N);
    while (N--)
    {
        scanf("%s", word);
        int len = strlen(word);
        for (int i = 1; i <= len; ++i)
        {
            if (len % i == 0)//如果滿足要求,最後的長度%len=0,所以下一個循環節開始應該是len % i == 0 的時候
            {
                int flag = 1;
                for (int j = i; j < len; ++j)
                {
                    if (word[j] != word[j % i]) //非常巧妙,用j%i,可以不斷循環,一直到最後,如果都沒有改變flag的狀態
                                                //就是需要的i
                    {
                        flag = 0;
                        break;
                    }
                }
                if (flag)
                {
                    printf("%d\n", i);
                    break;
                }
            }
        }
        if (N != 0)
            printf("\n");
    }
    return 0;
}


發佈了50 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章