Board logo

標題: d945: C. 小丹妮與英文單字 [打印本頁]

作者: 蔡昀修    時間: 2011-4-9 20:59     標題: d945: C. 小丹妮與英文單字

內容 : 正體->简体


小丹妮的興趣是尋找一些有趣的英文單字,最近她想找的英文單字是左右對稱的,像是 noon、level 或 radar,這種類型的英文單字被稱為迴文。

  不過,小丹妮發現左邊讀過去和右邊讀回來一樣的英文單字好像不太多,於是她的搜尋目標改成尋找包含迴文的英文單字,也就是切除英文單字的若干開頭或結尾字元後會是一個迴文,例如 career、musume 和 hollow。

  小丹妮希望找到的英文單字裡面包含的迴文越長越好,但是她覺得用肉眼判斷單字中的迴文長度實在是太累了,所以想請你幫她寫一個程式做這件事情。
輸入說明 :


第一行有一個整數 T ,代表接下來有幾組測試資料。

  每一組測試資料有一個字串,字串是由小寫的英文字母所組成,每個字串的長度不會超過 50000 。

輸出說明 :


對每筆測試資料輸出字串中最長的迴文長度。
範例輸入 :

若題目沒有特別說明,則應該以多測資的方式讀取,若不知如何讀取請參考 a001 的範例程式。4
radar
hollow
cat
enhance
範例輸出 :

5
4
1
1
作者: a3218290    時間: 2011-4-16 20:52

作法作法XD
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. char num[50001] ;
  5. int ans ;
  6. int n=0;
  7. int Go(int x,int y,int now)
  8. {
  9.     int i=0 ;
  10.     while(true)
  11.     {
  12.         i++     ;  
  13.        if((y+i<=n-1)&& (x-i>=0) && num[y+i]==num[x-i])   
  14.        {
  15.           now+=2 ;            
  16.        }else
  17.        {
  18.           return now ;
  19.           break ;      
  20.        }  ;   
  21.     }  
  22. }
  23. int main()
  24. {
  25.    int a ;
  26.    scanf("%d",&a) ;
  27.    for(int k=0;k<a;k++)
  28.    {  
  29.       scanf("%s",num) ;
  30.       ans=0 ;
  31.       n=strlen(num);
  32.       for(int i=0;i<n;i++)
  33.       {
  34.          ans>?=Go(i,i,1) ;
  35.          if(i<n-1 && num[i+1]==num[i])
  36.          {
  37.             ans>?=Go(i,i+1,2) ;      
  38.          }
  39.       }
  40.       printf("%d\n",ans) ;
  41.    }
  42.    

  43. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/) Powered by Discuz! 7.2