-1

Project Eulerの問題4を解決するためにC++を使用しようとしています。

各桁を配列に配置し、要素の値が正しい場所で同じかどうかを確認することを考えました。これは私がこれまでに持っているものです:

int digits[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

しかし、コードを書くことができません。どうすれば数字を取り、そのように見せることができますか? C++ の基本 (ループとポインター) を知っています。C++ で調整可能な配列を使用する方法と、これを使用する必要がありますか? また、配列のサイズがどうあるべきかわかりません。実装する別のより良いアルゴリズムはありますか?

4

5 に答える 5

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;
于 2013-07-12T00:18:57.680 に答える
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 problem 4 を読みました。おそらく、再帰的アプローチはそれを達成するための最良の方法ではありません。

于 2013-07-12T00:22:42.253 に答える
0

これで解決したことを願っていますが、最近困惑している人のために、文字列をいじらずにこれを達成する簡単な方法があります。mod 関数と除算 (% と /) の組み合わせを使用して、各桁を個別に調べることができます。これを解決した方法は、数値を逆方向に構築してから比較することです。ここで重要なのは、number%10 で 1 の位の数字が得られ、number/10 で 1 の位の数字が切り捨てられることを知っておくことです。楽しんでください。体育の問題に取り組むのは本当に楽しかったです。

于 2013-10-16T21:04:08.020 に答える
0

配列/文字列の長さがわかっている場合は、ループして要素 [i] と要素 [length-i-1] を比較できます

于 2013-07-12T00:15:42.220 に答える