2017-10-12 2 views
1

私はこの質問で少し苦労しています。 コードにANY条件/ループを使用しないで別の番号を返す必要があります。入力として2つの数字を取得し、3番目の異なる数字を返すメソッドを作成してください

私の考え方は、ソリューションの方向がビット操作を使用している可能性がありますか?

+0

あなたはどこから3つの番号を取得しますか?それらはハードコーディングされているか、追加のパラメータとして渡されているのでしょうか? – Paul

+0

@Paul、私は質問が 'int notEqualToAorB(int a、int b)'であると仮定します。 – DAle

+0

は、最後の2桁目を取り、それを変更し、変更されたbの最後の桁を連結します。 – Henry

答えて

1

((a&1)|(b&2))^3は、1ビット目にa異なって0と3の間の数であり、第2のビットにbは異なります。 (これはCの表記法を使用しています:&はビット単位で、|はビット単位でor、^はビット単位でxorです)。

+0

大丈夫ですが、a、bの両方が0の場合は? ^だけがそれらを変更するでしょうか? –

+0

@miss_M、cは3に等しくなります – DAle

1

3番目の番号が異なることを確認するには、変更された元の番号の一部を取ります。たとえば、数字が123と789の場合、最初の数字の「2」をとり、2番目の数字の「3」と「9」にして「0」にすることができます。これら2つを連結して「30」を得る。これは最初の数字にすることはできません。なぜなら、最後の数字が2番目の数字と異なるからです。最後の数字が異なるため、2番目の数字にすることはできません。

これは(整数演算を仮定して)ループとIFSなしで製剤化することができる。

(a+10)/10%10*10 + (b+1)%10 
+0

素晴らしい! しかし、両方のa、bが等しい場合、それらは0に等しいと言うことができます。 - > a = b = 0 この場合、この式はうまくいかないため、/ –

+0

問題はありません11. – Henry

+0

そうですよ! "123"から "second"の数字を取ったロジックは何ですか?いいえ、最初に言うことはできません。 –

1

与えられた二つの数字がある場合:

  • INPUT1
  • INPUT2

あなたは単純に返すことができます:

abs(intput1) +abs(input2) +1 

をあなたは1 + (-1) +1 = 1のようなものを避けるためにabs()を呼び出す必要があります

関連する問題