9

3 番目の変数を使用せずに 2 つの整数を交換する必要がある割り当てがあります。これを行う方法がわかりません。これをどのようにコーディングしますか?

4

9 に答える 9

19

はい、可能です:

Dim var1 = 1
Dim var2 = 2
var1 = var1 + var2
var2 = var1 - var2
var1 = var1 - var2

しかし、なぜそれが必要なのですか?コードが難解になります。

于 2012-04-27T11:58:19.190 に答える
7

仮定しましょう

a = 10; 
b = 20; 

a = a + b; // a = 30

b = a - b; // b = 10
a = a - b; // a = 20

値が交換されました。

于 2012-04-27T11:56:53.960 に答える
5

「 xor スワップ アルゴリズム」を読んでください。

ここで答えを見つけることができます:

http://www.java2s.com/Tutorial/VB/0040__Data-Type/Swaptwointegerswithoutusingathird.htm

firstValue = firstValue Xor secondValue
secondValue = firstValue Xor secondValue
firstValue = firstValue Xor secondValue
于 2012-04-27T11:57:59.067 に答える
3
 Dim a As Integer
 Dim b As Integer
 a= 1
 b= 2

 a = a Xor b
 b = a Xor b
 a = a Xor b
于 2012-04-27T12:04:09.720 に答える
2

2 つの数値変数を交換するには、次のようにします。

a = a + b;
b = a - b;
a = a - b;

また

a = a xor b;
b = a xor b;
a = a xor b;

ここで、a と b は交換する変数です

于 2012-04-27T11:57:59.283 に答える
0

上記の Xor または a+b アルゴリズムは機能し、これを行うための最良の方法ですが、奇妙な方法の例にすぎません。なぜこれをやりたいのかはまだわかりません。ByRef という 2 つの値を指定して、標準の swap メソッドを実行させる関数を作成するだけです。

Dim newList as New List(Of Integer)
newList.Add firstvalue
newList.Add secondValue
newList.Reverse
secondValue = newList.Item(0)
firstValue = newList.Item(1)
于 2012-04-27T12:31:58.357 に答える
0

あなたのために書かれたリンクを確認してください

アプローチ#1。

足し算と引き算の方法

Integer a, b
read a and b
a= a+b;
b=a-b;
a=a-b;

問題:

数値の合計が整数の範囲を超えると、誤った結果になります。

アプローチ#2。

乗除法

Integer a, b
read a and b
a=a*b;
b=a/b;
a=a/b;

問題:

  1. a*b の値が整数の範囲を超える場合。
  2. a または b の値がゼロの場合、間違った結果が返されます。

アプローチ#3。

XOR法

Integer a , b
read a and b
a=a^b;
b=a^b;
a=a^b;

落とし穴なしでこの問題を解決するための最良のアプローチ。

于 2016-02-27T03:07:53.697 に答える