2つの3桁の数の積から最大の回文を見つける(プロジェクトオイラー問題)

hkj447

この問題にはさまざまな解決策が存在することは理解していますが、解決策を確認した後、コードがどこで失敗しているかわかりません。参考までに私のコードは次のとおりです。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *strrev(char *str)
{
    if (!str || ! *str)
        return str;

    int i = strlen(str) - 1, j = 0;

    char ch;
    while (i > j)
    {
        ch = str[i];
        str[i] = str[j];
        str[j] = ch;
        i--;
        j++;
    }
    return str;
}

int main(){
    long int a,b, ab, maxA, maxB, pal;
    long int maxPal = 0;
    char string[6];
    char revString[6];

    for(a=999; a>100; a--){
        for(b=999; b>100; b--){
            ab = a*b;

            sprintf(string,"%ld",ab);
            strcpy(revString, strrev(string));
            strrev(string);

            if((revString[0] != '0') && (strcmp(string, revString)== 0)){
                printf("Palindrome %ld found!\n", ab);
                pal = ab;
                if(pal > maxPal){
                    maxPal = pal;
                    maxA = a;
                    maxB = b;
                }
            }
        }
    }


    printf("Maximim palindrome is %ld from the product of a = %ld and b = %ld \n", maxPal, maxA, maxB);
    return 1;
}

私は、100から999までの数字のすべてのペアを調べ、積を文字列に変換してから、文字列が逆方向に同じであるかどうかを確認することにより、力ずくの方法でこれを試みています。ただし、これを行うと、最大の回文として6桁の数字ではなく5桁の数字しか見つかりません。私の論理はかなり単純に思えますが、間違った結論に達しています。正しい答えではなく、自分の論理の何が間違っているのかを理解したいと思います。

pifor

見つかった回文の数を数えるようにコードを変更しました。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *strrev(char *str)
{
    if (!str || ! *str)
        return str;

    int i = strlen(str) - 1, j = 0;

    char ch;
    while (i > j)
    {
        ch = str[i];
        str[i] = str[j];
        str[j] = ch;
        i--;
        j++;
    }
    return str;
}

int main(){
    long int a,b, ab, maxA, maxB, pal;
    long int maxPal = 0;
    char string[6];
    char revString[6];
    int n6dp = 0;
    int n5dp = 0;

    for(a=999; a>100; a--){
        for(b=999; b>100; b--){
            ab = a*b;

            sprintf(string,"%ld",ab);
            strcpy(revString, strrev(string));
            strrev(string);

            if((revString[0] != '0') && (strcmp(string, revString)== 0)){
        if (strlen(string) == 6)
        {
            n6dp++;
        }
        if (strlen(string) == 5)
        {
            n5dp++;
        }
                pal = ab;
                if(pal > maxPal){
                    maxPal = pal;
                    maxA = a;
                    maxB = b;
                }
            }
        }
    }


    printf("number of 5 digits palindroms found = %d\n", n5dp);
    printf("number of 6 digits palindroms found = %d\n", n6dp);
    printf("Max. palindrome is %ld from the product of a = %ld and b = %ld \n", maxPal, maxA, maxB);

    return 0;
}

これが私が得るものです:

$ ./pal
number of 5 digits palindroms found = 1493
number of 6 digits palindroms found = 977
Max. palindrome is 906609 from the product of a = 993 and b = 913 

あなたのコードは6桁の回文を見つけました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

プロジェクトオイラー:2つの3桁の数字の最大の回文製品

分類Dev

プロジェクトオイラーの課題3:多数の最大の素数因子を見つける

分類Dev

2つの3桁の数字の積から作られた最大の回文を見つけるC#

分類Dev

2つの単純な(プライム)5桁の数字の積である最大の回文数を見つけます。Javascript

分類Dev

2つの単純な(プライム)5桁の数字の積である最大の回文数を見つけます。Javascript

分類Dev

Pythonの3つの数の積から最大の回文を見つけます

分類Dev

Project Euler のプログラム 4 の Java コードの何が問題になっていますか? (2 3 桁の数字の最大の回文を見つける)

分類Dev

JAVAプロジェクトオイラーP.#8、1000桁の数字から最高の製品を見つける

分類Dev

2つのベースの回文数、プロジェクトオイラー#36

分類Dev

プロジェクトオイラータスク17.数字の範囲からすべての文字の数を見つける

分類Dev

numpyを使用して2つの3桁の数字の積から作られた最大の回文を見つけます

分類Dev

3つから真ん中の要素を見つける(トリプレットの最大積を見つける)

分類Dev

2つの数の積を見つけるプログラム

分類Dev

Dateオブジェクトの累積最大値を見つける

分類Dev

Javaでオイラー数を見つける際の問題

分類Dev

同じ桁数の2つの数値の積である最大の回文を見つける最速のアルゴリズム

分類Dev

プロジェクトオイラー-最大の回文製品

分類Dev

プロジェクトオイラー-最大の回文#4 Python

分類Dev

日食プロジェクトでエラーの数を見つける

分類Dev

他のクラスからオブジェクトへのポインタを受け取るメンバー関数を持つ2つのクラス

分類Dev

ヒープ内のオブジェクトの数を見つける方法

分類Dev

javafxports android プロジェクトで構成ファイルを見つける際の問題

分類Dev

スクレーパーのhtmlオブジェクトを見つけるのに問題がある

分類Dev

dplyrを使用したプログラミングの問題-パイプの一部にオブジェクトが見つからないが、以前に動作しているというエラー

分類Dev

シェルsciptからプロセスIDを見つける際の問題

分類Dev

C ++:数の最大の素数を見つけるプログラム、私のコードの何が問題になっていますか?

分類Dev

与えられた範囲の回文数を見つけるJavaプログラム

分類Dev

配列内のオブジェクトのパラメータの最大値を見つける方法は?

分類Dev

反応で2つのオブジェクト配列の共通のプロパティ値を見つける

Related 関連記事

  1. 1

    プロジェクトオイラー:2つの3桁の数字の最大の回文製品

  2. 2

    プロジェクトオイラーの課題3:多数の最大の素数因子を見つける

  3. 3

    2つの3桁の数字の積から作られた最大の回文を見つけるC#

  4. 4

    2つの単純な(プライム)5桁の数字の積である最大の回文数を見つけます。Javascript

  5. 5

    2つの単純な(プライム)5桁の数字の積である最大の回文数を見つけます。Javascript

  6. 6

    Pythonの3つの数の積から最大の回文を見つけます

  7. 7

    Project Euler のプログラム 4 の Java コードの何が問題になっていますか? (2 3 桁の数字の最大の回文を見つける)

  8. 8

    JAVAプロジェクトオイラーP.#8、1000桁の数字から最高の製品を見つける

  9. 9

    2つのベースの回文数、プロジェクトオイラー#36

  10. 10

    プロジェクトオイラータスク17.数字の範囲からすべての文字の数を見つける

  11. 11

    numpyを使用して2つの3桁の数字の積から作られた最大の回文を見つけます

  12. 12

    3つから真ん中の要素を見つける(トリプレットの最大積を見つける)

  13. 13

    2つの数の積を見つけるプログラム

  14. 14

    Dateオブジェクトの累積最大値を見つける

  15. 15

    Javaでオイラー数を見つける際の問題

  16. 16

    同じ桁数の2つの数値の積である最大の回文を見つける最速のアルゴリズム

  17. 17

    プロジェクトオイラー-最大の回文製品

  18. 18

    プロジェクトオイラー-最大の回文#4 Python

  19. 19

    日食プロジェクトでエラーの数を見つける

  20. 20

    他のクラスからオブジェクトへのポインタを受け取るメンバー関数を持つ2つのクラス

  21. 21

    ヒープ内のオブジェクトの数を見つける方法

  22. 22

    javafxports android プロジェクトで構成ファイルを見つける際の問題

  23. 23

    スクレーパーのhtmlオブジェクトを見つけるのに問題がある

  24. 24

    dplyrを使用したプログラミングの問題-パイプの一部にオブジェクトが見つからないが、以前に動作しているというエラー

  25. 25

    シェルsciptからプロセスIDを見つける際の問題

  26. 26

    C ++:数の最大の素数を見つけるプログラム、私のコードの何が問題になっていますか?

  27. 27

    与えられた範囲の回文数を見つけるJavaプログラム

  28. 28

    配列内のオブジェクトのパラメータの最大値を見つける方法は?

  29. 29

    反応で2つのオブジェクト配列の共通のプロパティ値を見つける

ホットタグ

アーカイブ