2015-01-12 4 views
-1

나는이 문제를 해결하는 데 어려움을 겪고 있습니다. 사용자는 15 개의 숫자 (정수)를 입력해야하며 회문이 있는지 확인해야합니다.배열을 사용하여 palindrome 찾기

만약 내가 가장 긴 것을 취해야한다면, 그리고 같은 크기를 가진 것이 더 많으면 나는 색인을 먼저 가져야 만한다. 즉 :

순간에 내 코드입니다
Input: 
1 2 1 3 5 6 7 8 9 4 5 6 8 9 8 
Output: 
Palindrome Found: 121 
Input: 
1 2 1 3 3 1 6 4 8 7 9 5 4 8 6 
Output: 
1 3 3 1 

: 내가 그것을 실행할 때 는, K와 배열 1 [K]의 값이, 오류 것으로 보인다는. 나는 값 5373952. 과 함께 그것들을 되돌려 보았습니다. 회문이있는 경우에도 회문이 발견되지 않았다고 다시 전화합니다.

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    double arr[15]={0}; 
    int array1[15]; 
    int i,j,k=0; 

    for (i=0; i<15; i++) // the program is asking for 15 numbers from the user. 
    { 
     scanf("%lf", &arr[i]); 
     if ((arr[i]-(int)arr[i])!= 0)// if the number is not a whole number, the program will stop immediately. 
     { 
      printf("Error \n"); 
      return (0); 
     } 
    } 
    for (i=0; i<15; i++) 
    { 
     for(j=14; j>=i; j--) // going back-wards to the start. checking at each point for a match. 
     { 
      if ((int)arr[i]==(int)arr[j]) 
      { 
       array1[k]=(int)arr[j]; 
       i++; 
       j--; 
       k++; 
       break; 
      } 
     } 
    } 
    if ((int)arr[j] == array1[k]) 
    { 
     printf("Palindrome Found:%d \n", array1[k]); 
    } 
    else 
    { 
     printf("Palindrome Not Found \n"); 
    } 

    return (0); 

} 
+2

무엇이 문제입니까? 당신의 문제는 무엇입니까? 무슨 일 이니? – DrKoch

+1

더 똑똑한 알고리즘을 수행했다면 스택으로 구현할 수 있습니다. 그것은 SO 질문이 아닙니다. 오류가 발생하면 그 사실을 알려주십시오. – kidshaw

+2

정수가 아닐 경우 왜 두 글자를 버리면 '이중'으로 입력합니까? –

답변

0

숫자는 0과 9 사이 여야하며, 더 커야합니까? 예를 들어

1 2 13 22 16 4 

어쨌든 입력으로 문자열을 사용하는 것이 좋습니다.

+0

배열로만 작업해야합니다 ... 그리고 예, 숫자가 모두 0-9 사이에 있습니다. – lili

+0

문자열도 문자 배열입니다. 숫자가 0-9로 제한 되어도 상관 없습니다. 그러나 숫자가 1 자리 이상인 경우 문자열보다 훨씬 더 나은 솔루션입니다. – IrineK

0
#include <stdio.h> 

int main(void){ 
    int arr[15]={0}; 
    int i,j; 
    int start, end, max_len = 1; 

    for (i=0; i<15; i++){ 
     if(1 != scanf("%1d", &arr[i]) || arr[i] < 0){ 
      printf("input error\n"); 
      return 1; 
     } 
    } 
    for(i = 0; i < 15 - max_len; ++i){ 
     for(j=i+max_len; j<15; ++j){ 
      if(arr[i]==arr[j]){ 
       int found = 1; 
       int s, e, len = j - i + 1; 
       for(s=i, e=j; s < e; ++s, --e){ 
        if(arr[s] != arr[e]){ 
         found = 0; 
         break; 
        } 
       } 
       if(found && max_len < len){ 
        start = i; 
        end = j; 
        max_len = len; 
       } 
      } 
     } 
    } 
    if(max_len == 1) 
     printf("Palindrome Not Found \n"); 
    else { 
     printf("Palindrome Found:"); 
     for(i=start; i<=end; ++i) 
      printf(" %d", arr[i]); 
     printf("\n"); 
    } 

    return 0; 
}