使用数组找到回文

时间:2015-01-12 20:49:24

标签: c arrays palindrome

我有这个问题,我有麻烦要解决。 用户需要输入15个数字(整数),我需要检查是否有回文。

如果有多于一个我必须采取最长的一个,如果有多个具有相同的大小,我必须采取其索引首先的那个。即:

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和array1 [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 个答案:

答案 0 :(得分:0)

号码必须介于0到9之间,还是可以更大?例如

1 2 13 22 16 4

无论如何,将输入作为字符串使用是明智的。

答案 1 :(得分: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;
}