我正在尝试使用C ++来解决Project Euler problem 4。
我想把每个数字放到一个数组中,看看元素的值是否在正确的位置是相同的。这就是我到目前为止所做的:
int digits[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
但是我不能写代码。我怎样才能拿出这个数字并让它看起来那样? 我知道C ++(循环和指针)的基础知识。 如何在C ++中使用可调整数组,我应该使用它吗? 我也不知道数组的大小应该是多少。 还有其他更好的算法可以实现吗?
答案 0 :(得分:0)
如果你知道数组/字符串长度,你可以循环并比较元素[i]和元素[length-i-1]
答案 1 :(得分:0)
您可以使用循环来检查结尾是否匹配:
int digits[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int length = sizeof(digits)/sizeof(digits[0]);
for (int i = 0; i < length; i++) {
if (digit[i] != digits[length - i - 1])
return false; // at this point, you know the number is not a palindrome
return true;
答案 2 :(得分:0)
长度计算是一种类似C的方法,但它确实有效。
#include <iostream>
using namespace std;
bool isPalindrome(int* digit_array, int len) {
if(len <= 1) return true;
if(digit_array[0] != digit_array[len-1])
return false;
else
return isPalindrome(++digit_array, len-2);
}
int main() {
int digits[] = {1, 2, 3, 4};
int digits2[] = {1, 2, 2, 1};
// it returns false
cout << "isPalindrome(digits) => " << isPalindrome(digits, (sizeof(digits)/sizeof(*digits))) << endl;
// it returns true
cout << "isPalindrome(digits2) => " << isPalindrome(digits2, (sizeof(digits2)/sizeof(*digits2))) << endl;
return 0;
}
编辑:我刚读过Project Euler问题4.也许递归方法不是实现它的最好方法。
答案 3 :(得分:0)
我会将整数转换为字符串,并检查字符串的反向是否等于它自己。
#include <iostream>
#include <string>
int main()
{
int num = 21334;
auto s = std::to_string( num );
if (std::string(s.begin(), s.end()) == std::string(s.rbegin(), s.rend()))
{
std::cout << "num is a palindrome";
} else
{
std::cout << "num is not a palindrome";
}
}
答案 4 :(得分:0)
我希望你现在已经解决了这个问题但是对于那些最近难倒的人来说,有一种更简单的方法可以在不弄乱字符串的情况下实现这一点。您可以使用mod函数和除法(%和/)的组合来分别查看每个数字。我解决这个问题的方法是向后构建数字,然后比较它们。这里的关键是知道数字%10将给你一个位置数字,然后数字/ 10将切断那些位数字。玩得开心,我非常喜欢解决一些体育问题!