我的一个学术项目需要帮助。 我需要编写一种算法来从用户决定写的六位数中找到回文数。 对我来说有一些限制,该数字必须为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");
}
}
答案 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");