ホームページ >バックエンド開発 >C++ >C でループや条件文を使わずに 1 から 1000 までの数値を順番に出力するにはどうすればよいですか?

C でループや条件文を使わずに 1 から 1000 までの数値を順番に出力するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-26 17:37:10308ブラウズ

How Can Numbers Be Printed Sequentially from 1 to 1000 Without Loops or Conditional Statements in C?

ループや条件なしで数値を出力するという謎を解く

ループや条件に依存せずに 1 から 1000 までの数値を連続して出力するという課題は、その型破りなアプローチでプログラマーの興味をそそります。プログラミングの基本的なツールがなければ、このような一見単​​純なタスクをどのようにして達成できるのでしょうか?

C でのソリューションのロックを解除

以下の C コード スニペットで示されているソリューション、ポインター算術と再帰を利用することにあります。

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

void main(int j) {
  printf("%d\n", j);
  (&&main + (&exit - &main)*(j/1000))(j+1);
}

このコードは関数を巧みに利用しています。ポインタと再帰を使用して、ループや条件文の必要性を回避します。 j/1000 の比率に基づいて次の再帰呼び出しのアドレスを計算します。 main 関数のアドレスを注意深く操作することにより、プログラムはシーケンス内の次の数値への「ジャンプ」を効果的にシミュレートします。

標準 C のバリアント

の場合より標準的な C アプローチを好む人は、次のコードを使用して関数の算術への依存を排除​​します。 pointers:

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

void f(int j)
{
    static void (*const ft[2])(int) = { f, exit };

    printf("%d\n", j);
    ft[j/1000](j + 1);
}

int main(int argc, char *argv[])
{
    f(1);
}

これらの C コード スニペットはどちらも、ループや条件を使用せずに数値を連続的に出力できることを示しています。これらは、関数ポインターと再帰を操作して、一見克服不可能な制限を克服する能力を示しています。

以上がC でループや条件文を使わずに 1 から 1000 までの数値を順番に出力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。