m3ph1st0sのプログラミングパズル1(C ++)[終了]


26

これは、一連のC ++パズルの最初のものです。お楽しみください。

パズル1番:

次のプログラムを考えます:

#include <iostream>
int main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
   std::cout << a/b-a*c;
}

プログラム内の単一の新しい行にコードを挿入して、出力が0になるようにします。新しい行にはAT MOST 18文字(スペースを含む)が含まれ、残りの行は変更されません。明確にするために、有効な新しいコードの例を次に示します。

#include <iostream>
int main() 
{
   const int a=1;
   const int b=2;
   int* p = NULL;
   const float c=0.5;
   std::cout << a/b-a*c;
}

15文字の新しい行が挿入されたため、問題ありません。ただし、問題は解決しません。

これがあなたにとって単純すぎる場合、心配しないで、もっと来ています!!


2
誰かがC ++の質問を時々投稿してくれてとてもうれしいです!つまり、C ++ソリューションが20行または30行になるすべてのパズルでは、JまたはKまたはGolfscriptでソリューションを投稿する人々はしばらくするとイライラするようになります。
ミスターリスター

3
結果は有効で明確に定義されたC ++である必要がありますか、それともUBを使用できますか?(しかし、リスター氏が指摘したように、元のコードは有効なC ++でさえありません。)
コンラッドルドルフ

4
無効です。主な必見のリターンint型(C ++標準を読む)
BЈовић

2
ここにポイントがありません。あなたが気にしたらintとreturn 0を入れてください、私はしませんでした。
ボグダンアレクサンドルー

11
@ボグダン:ダフク?1つは、DevC ++は非常に古くからあり、その出力は無関係です。そして第二に、OSをターゲットとする特定の構成のコンパイラが、それを受け入れるかどうかにかかわらず、有効なC ++になりません。
DeadMG

回答:


14
#define int float

同様に機能するはずで、同じ長さです。


私は最初のアイデアで来た時、これは私が考えていたものである
ボグダンアレクサンドル

5
#define int float実際には未定義の動作です。キーワードに新しい意味を与えることはできません。
fredoverflow

フレッド、ソースを引用できますか?GCC cppのドキュメントには、「Cキーワードであっても、有効な識別子をマクロとして定義できます」と書かれています。
ダン

@Dan:C ++標準では禁止されています。
DeadMG

3
それはUBかもしれませんが、いくつかの一般的なコンパイラはとにかくそれをサポートします。組み込み型#define int ERRORint32_t代わりに同等の型を使用するように強制しました。にたどり着くまでに、int main()マクロを忘れていて、なぜコードがコンパイルされないのか疑問に思いました。
dan04 14年

33

a = 1を別のスコープに移動することで取り除くことができます:

#include <iostream>
main() 
{
int a=0;if(0)
    const int a=1;
    const int b=2;
    const float c=0.5;
    std::cout << a/b-a*c;
}

これは13文字だと思います。または、新しいものaを取得して、0になります:

#include <iostream>
int main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
if(int a=2)
   std::cout << a/b-a*c;
}

11文字です


24
#include <iostream>
main() 
{
   const int a=1;
#define a 0
   const int b=2;
   const float c=0.5;
   std::cout << a/b-a*c;
}

1つの新しい行、12の新しい文字


それは私が提出したかったものです...あなたのために+1。
H2CO3

質問を読んだときの私の最初のアイデア)))
Qwertiy

23

それで、#define a 0完了。私はそれが投稿されたのを見ました-当然です。

驚いたことに、これは投稿されていません。

#include <iostream>
main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
   std::cout<<0||
   std::cout << a/b-a*c;
}

14文字

それでいいでしょう?


21
#include <iostream>
main() 
{
const int a=0;//\
   const int a=1;
   const int b=2;
   const float c=0.5;
   std::cout << a/b-a*c;
}

17文字。

ちなみに、元のプログラムはMSVCでコンパイルされません。MSVCではmain、戻り値の型がないと文句を言います。


2
int a = 0; // \もトリックを行います
コピー

2
絶対に。しかし、これは「最短ライン勝ち」のようなコンテストですか?
ミスターリスター

そう思いましたが、そうではありません。ちなみにナイストリック
コピー

2
はい、最短のソリューションがcodegolf SEで勝ちます。見るよくある質問
BЈовић

2
@BЈовићFAQには、実際のコードゴルフの質問に対して最短の解決策が勝つと書かれています。この質問は、明らかにコードゴルフの質問ではありません。
小次郎

11

18、改行を含む

#define float int

私はこれが本当に動作するかどうかよくわかりません...私たちはcをフロートとして宣言し、0.5で初期化しています
Bogdan Alexandru

5
これはゼロに切り捨てられます。
DeadMG

あなたは右、私は小数点値を持つint型を初期化するに遭遇したことがありません面白いことに、私はそれは、コンパイラのエラーだろうと思ったと思いますが、それは唯一の警告を発行
ボグダンアレクサンドルを

2
@BogdanAlexandruは、C ++標準に目を通します。具体的には、ここでの暗黙の変換について詳しく説明しています。
オールドリンブ

2
すべてのコンパイラがこれを許可していますが、標準でfloatはキーワードの再定義が禁止されていることに注意してください(キーワードです)。
avakar


9
#include <iostream>
main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
#define a 0;1
   std::cout << a/b-a*c;
}

14文字。


7
#include <iostream>
main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
   return puts("0");
   std::cout << a/b-a*c;
}

17文字。


1
C ++に関連するあらゆるものに直面して飛ぶため、これまでで最高のソリューションです。
fabspro

3
「puts」はこのスコープでは宣言されませんでした
-shiona

@shionaどのコンパイラを使用していますか?
Ashrr

@Ashrr gcc(g ++)4.5.4
shiona

1
このコードは0を返します。ただし、感嘆符を使用してスペースを置き換えることができます。とにかく、いつputsがゼロを返すかわかりません。
Qwertiy

7
#include <iostream>
main()
{
   const int a=1;
   const int b=2;
   const float c=0.5;
std::cout<<0;//\
   std::cout << a/b-a*c;
}

17文字なので、ぴったり収まります。


7

私はC ++を知りませんが、質問に基づいて、単に0を出力するために行を入力することはできませんか?質問では、出力を0に指定する必要がありますが、出力を0に変更する必要があることは指定していません。

std::cout << 0

(私はC ++の手がかりがありませんが、おそらく誰かがこの概念を使用できます)


まあ、出力は0だけである必要があります。それは明らかだと思いました。そうでなければ、パズルはないでしょうか?
ボグダンアレクサンドル

7
@BogdanAlexandruこれらのパズルを解くには、文章の質の悪い質問を悪用するのが一般的な手法であることがわかります。ユーザーがこれらのショートカットを使用できないようにするには、数分かけて自分の質問を分析し、潜在的なあいまいさを排除してください。
-ardnew

3

Mobのソリューションに似た12文字

#include <iostream>
int main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
#define a b
   std::cout << a/b-a*c;
}

#define a cまたはのような他の組み合わせも機能します#define c 0


2

私はそれがではないことを知っていが、今日はその帽子をかぶっているようです!

#include <iostream>
int main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;

--a;

   std::cout << a/b-a*c;
}

改行を含む5文字。


2
これは、コンパイルされませんaですconst
Csq

おっと、コンパイラに渡すべきだった!:-(
トビースペイト

0

C ++なんでも...

echo "0"; exit
#include <iostream>
int main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
   std::cout << a/b-a*c;
}

経由で実行:

sh mp.cpp

良い試みですが、要件に違反しています:有効なC ++。
コンラッドルドルフ


-1
#include <iostream>
int main() 
{
int a;if(a)
   const int a=1;
   const int b=2;
   const float c=0.5;
   std::cout << a/b-a*c;
}

これらの11文字はどうですか...


1
ここでの問題は、ということであるint a前にif初期化されていないので、a任意の値を持つことができます。
-frozenkoi

1
これは未定義ですa。初期化されていない値を使用しています。
コンラッドルドルフ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.