web-dev-qa-db-ja.com

ループや条件なしで1から1000まで印刷する

タスク:ループや条件文を使用せずに1から1000までの数字を印刷します。 printf()またはcoutステートメントを1000回書くだけではいけません。

CやC++を使ってどのようにしますか。

323
Saurabh Gokhale

これが「トリックな質問」だとは思わない。 。 。 "?:"は条件式ではなく、演算子です。

再帰と?:演算子を使用して、いつ停止するかを検出しますか。

int recurse(i)
{
   printf("%d\n", i);
   int unused = i-1000?recurse(i+1):0;

}

recurse(1);

または同様の倒錯した考え方に沿って。 。 。 "&"条件の2番目の句は、最初の値がtrueの場合にのみ実行されます。だからこのようなものを再帰:

i-1000 & recurse(i+1);

インタビュアーはおそらく、条件式ではなく式であると考えています。

0
Frank Merrow

あなたは1から1000までを印刷するのにSystem()を使うことができます(DOSコマンドを使ってによる

 include <process.h>
 void main()
 {
     system("cmd.exe /c for /l %x in (1, 1, 1000) do echo %x" );
 }

1から1000までを表示するあなたのプログラムの.exe(executable)ファイルを実行してください

注:Windowsでテスト済み

0
Javed Akram

私はコードを書くつもりはありませんが、アイデアだけを書きます。 1秒間に数字を出力するスレッドを作成してから、1000秒後に別のスレッドが最初のスレッドを強制終了するのはどうですか。

注意:最初のスレッドは再帰によって数を生成します。

0
Kay Chan

私はこれらのコードが完全に正しく機能すると思います、そしてあなたが1から100または最終的な範囲に1のようなものを印刷することができるということを理解するのは簡単です。ただそれをiに入れてそれをcall関数に転送するだけです。

int main()
{
    int i=1;
    call(i,i);
}

void call(int i,int j)
{
    printf("%d",i);
    sleep(1); // to see the numbers for delay
    j /= (j-1000);

    j = ++i;

    call(i,j);
}

それでjが1000に等しいとき、それはゼロで割られて、それは数を印刷するという私の考えであるプログラムを直接出ます

もっと単純なコード.

int main()
{
    static int i = 1;
    static int j = 1;
    printf("%d", i);
    sleep(1);
    j = ++i;
    j /= (j-1000);
    main();
}
0
jack