C语言中使用特定算法查找回文

时间:2019-01-19 11:05:40

标签: c

我的一个学术项目需要帮助。 我需要编写一种算法来从用户决定写的六位数中找到回文数。 对我来说有一些限制,该数字必须为6位数字长,代码必须包含将计算给定数字的函数,并且该数字必须位于数组中。 到目前为止,如果有人可以帮助我弄清为什么它不起作用,我将坚持我的算法。 谢谢你们!

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#define N 6

int palindrome(int rev_arr[N], int arr[N]);

int palindrome(int rev_arr[N], int arr[N])
{
    int i = 0, j = 0;
    int a = 0;

    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            arr[i] = rev_arr[j];
        }
    }
    for (i = 0; i < N; i++)
    {
        for (j = N; j >= 0; j--)
        {
            if (arr[i] == rev_arr[j])
            {
                a = 1;
            }
            else
            {
                a = 0;
            }
        }
    }
    return a;
}

void main()
{
    int i = 0, arr[N], rev_arr[N], j = 0, p1 = 0, a = 0;

    printf("Please enter your six digit's number:\n");
    for (i = 0; i < N; i++)
    {
        scanf("%d", &arr[i]);
    }

    p1 = palindrome(rev_arr[N],arr[N]);
        if (p1 == 1)
        {
            printf("The number is palindrome! :)\n");
        }
        else if (p1 == 0)
        {
            printf("The numbe is not palindrome! :(\n");
        }
}

1 个答案:

答案 0 :(得分:2)

您可以停在其中间len位置上,而不用扫描所有数组len:

int palindrome(int arr[N])
{
    int i = 0, end = N / 2;

    for (i = 0; i < end; i++)
    {
        if (arr[i] != arr[N-i-1])
            return 0;
    }

    return 1;
}

还请注意,对palindrome函数的正确调用是palindrome(arr)而不是palindrome(arr[N])

因此您可以通过以下操作检查序列是否为回文序列:

if (palindrome(arr))
    printf("The number is palindrome! :)\n");
else
    printf("The numbe is not palindrome! :(\n");