1

私の友人は私に彼ができない運動を送ってくれました:
(C ++)

int main()
{
    unsigned int x = 0xB0FF14a5;
    unsigned int y = 0x7340c00e;
    // enter code here
    if(x==0x7340c00e && y==0xB0FF14a5) victory();
    return 0;
}

主な目標は、victory()関数を実行することです。
前提条件:-最大
11文字
-使用できません: "main"、 "victory"、 "asm"、 "&"、 "*"、 "("、"/"
-使用できるセミコロンは1つだけ

です#defineと他のいくつかのことですが、何もありません(私はC ++マスターではありません):/
これを解決する方法がわかりません;助けてくれてありがとう!

4

4 に答える 4

12

XORスワップアルゴリズムを使用します。

x^=y^=x^=y;

これは、以下と同等です(通常は以下を参照)。

          //x==A,   y==B
x ^= y;   //x==A^B, y==B
y ^= x;   //x==A^B, y==A
x ^= y;   //x==B,   y==A

同じ番号で2回XORを実行すると、元の番号が得られるため、これは機能します。

C ++ 03では、単一式バージョンは未定義の動作であるため、すべてのコンパイラ/プラットフォームで正しく機能しない場合があります。これは、変数の変更と使用の間にシーケンスポイントがないためです。

C ++ 11では、明確に定義されています。標準によると(5.17.1):

いずれの場合も、代入は、右オペランドと左オペランドの値計算の後、代入式の値計算の前に順序付けられます。

于 2012-08-16T14:30:30.433 に答える
8

未定義の動作ですが、私のコンピューターで動作します:

x^=y^=x^=y;

更新:明らかに、これは2011年以降明確に定義されています。インタージェイの答えを参照してください。

于 2012-08-16T14:31:11.307 に答える
4

13文字で、他のルールに違反していますが、仕事を終わらせ、可愛すぎて投稿できません:

#include<iostream>

void victory()
{
   std::cout << "Yes we can\n";
}

int main()
{
    unsigned int x = 0xB0FF14a5;
    unsigned int y = 0x7340c00e;
    #define if(x)
    if(x==0x7340c00e && y==0xB0FF14a5) victory();
    return 0;
}

Ideoneの出力

于 2012-08-16T14:36:24.673 に答える
1

このアルゴリズムを見てください:XORスワップアルゴリズム しかし、次のようなコンパイル警告が表示されます:

warning: operation on ‘x’ may be undefined

このアルゴリズムを1行で使用する場合

x ^= y ^= x ^= y;
于 2012-08-16T14:31:52.477 に答える