ホームページ  >  記事  >  ProjectEuler 質問 17: このコード行を変更すると、うまくいくはずだと思っていたにもかかわらず、答えが劇的に変わりました

ProjectEuler 質問 17: このコード行を変更すると、うまくいくはずだと思っていたにもかかわらず、答えが劇的に変わりました

WBOY
WBOY転載
2024-02-13 20:51:08909ブラウズ

php エディタ Apple は、ProjectEuler 第 17 号で興味深い状況に遭遇しました。コードを 1 行変更した後、コードは正常に動作するはずだと思っていたにもかかわらず、答えが劇的に変わってしまったことがわかりました。この疑問が彼の好奇心を刺激し、その理由を調べて解決策を探し始めました。この物語には挑戦と想いが詰まっており、編集者の答えが楽しみになります。

質問内容

プロジェクトオイラーの質問17に取り組んでいます。書かれた数字の合計文字数を 1 ~ 1000 までカウントするプログラムを作成する必要があります。スペースとハイフンは無視されます。問題の説明によると、数百の数字に「and」が含まれています (342)。私のコードは、100 の倍数 (追加の「合計」を計算する場合) を除いて、ほとんどの場合に機能します。たとえば、600 は「600 and」と数えます。このため、私の答えは 27 (100 桁中 9 桁中 3 桁) から外れてしまいました。これはほぼ正しい解決策です:

リーリー

これにより、出力は 21151 になりますが、これは予想される出力 21124 とは 27 異なります。変数 num はデバッグ目的で使用されます。

ループの行の 1 つを変更して、追加のステートメントを追加してみました:

リーリー

この更新バージョンを実行すると、出力は 18487 になります。なぜこの違いがこれほど顕著なのかわかりませんが、これがどこから来るのかを理解したいと思っています。私の知識が限られていたため、最初は三項演算子のせいだと思いました。また、コードをより効率的にするための提案も歓迎します。 印刷する前に sum-27 と入力したいのですが、それは少しズルな気がします:)。 ありがとう!

回避策

他の人があなたの質問へのコメントで述べているように、あなたの問題は、コードが100の倍数の数値をどのように処理するかです。常に hundred を追加し、単に hundredum> を追加することはありません。実際、あなたは質問の中で自分自身を示しました:

以下のコードでは、三項演算子ではなく、明示的な if ステートメントを使用しています。これは、コードを読むときに理解しやすくなると考えているためです。これが、質問に投稿されたコードに加えた唯一の変更であることに注意してください。

リーリー

上記のコードを実行すると、次の結果が得られます:

リーリー

質問のコード内で、これが予想される答えであると (コードのコメントに) 書きました。

以上がProjectEuler 質問 17: このコード行を変更すると、うまくいくはずだと思っていたにもかかわらず、答えが劇的に変わりましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。