1. 程式人生 > >演算法--實現兩個數互換(不引入第三方變數)

演算法--實現兩個數互換(不引入第三方變數)

m = 3
n = 8
現在是想m與n互換;

1、我們一般想到的就是引入第三方變數。
temp = m;
m = n;
n =temp;
這是比較常見的,但是現在我們不希望引入第三方變數,怎麼做呢?

2、 int m = 8, n=3;
n = n+m = 11
m = n - m = 3;
n = n-m = 8;
但是這種方法又侷限性,當n和m的值非常大,那就容易超出了int的範圍;

3、n = n^m;
m = n^m; ========> (n^m)^m=n;
n = n^m; ========> (m^n)^n=m;

n異或一個數兩次還是n本身;
開發的時候推薦使用第一種,因為容易想到。

相關推薦

演算法--實現個數互換引入第三方變數

m = 3 n = 8 現在是想m與n互換; 1、我們一般想到的就是引入第三方變數。 temp = m; m = n; n =temp; 這是比較常見的,但是現在我們不希望引入第三方變數,

3種方法交換個整數建立臨時變數+輸出一組資料最大值+簡單排序+最大公約數

交換兩個整數: 第一種: int a = 6; int b = 8; int t = 0; t = a; a = b; b = t; printf("a = %d b = %d\n", a, b); 後兩種不建立臨時變數 第二種: int a = 6; int

演算法實現:插入排序C/C++、Python

虛擬碼: INSERTION-SORT for j <- 2 to length[A] key <- A[j] Insert A[j]into the sorted sequence A[l...j-1]. i <- j - 1 wh

Kruskal演算法實現最小生成樹鄰接矩陣儲存圖

程式碼如下: #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct { int u; int v; int w; }Edges; void Bubblesort(

Prim演算法實現最小生成樹鄰接矩陣儲存圖

程式碼如下 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct { int vertex[MAXSIZE]; int edges[MAXSIZE][MAXSIZE];

演算法實現:選擇排序C/C++、Python

虛擬碼: SELECTION-SORT{A) n <- length[A] for i<-1 to n-1 do j <-FIND-MIN(A,i,n) A[j]&l

演算法實現:合併排序C/C++、Python

合併排序的關鍵步驟在於合併步驟中的合併兩個已排序子序列。為做合併,引入一個輔助過程MERGE(A, p, q, r), 其中A是一個數組,p、q和r是下標,滿足p小於等於q小於r。該過程假設子陣列A[p...q] 和A[q+1...r]都已排好序,並將它們合併成一個已排好序的

textarea如何實現高度自適應出現滾動條

今天需要些一個回覆評論的頁面,設計師給的初始介面就是一個只有一行的框。然後當時就想這個互動該怎麼實現比較好,然後想起了新浪微博的做法:點選評論,預設顯示一行,當輸入的文字超過一行或者輸入Enter時,輸入框的高度會隨著改變,直到輸入完畢。頓時覺得這個細節做得挺不錯的,可以效仿下。下面分享2種實現text

利用tkinter實現簡單計算器功能使用eval函式

利用tkinter實現簡單計算器功能(不使用eval函式) 一、思路 tkinter: 佈置主介面; 上部為數字顯示介面; 下部為數字鍵與功能鍵介面; 邏輯: 程式只考慮兩個運算元進行計算的情況,不考慮複雜情況 展示:

“1到10萬這些數,去除2個並打亂次序,如何找出那個數不準用點陣圖”...

#include <algorithm> #include <iostream> #include <vector> #include <ctime> using namespace std; void shuffle(vect

Android-將View轉換成圖片分享到QQ,微信使用第三方API

效果:將如圖所示的一個LinearLayout分享到qq 佈局程式碼為: <!--左邊表情處理區域--> <LinearLayout android:id="@+id/

手工畫折線圖使用第三方jar

大神勿噴謝謝!   很多剛學android的人很害怕畫折線圖,覺得折線圖呈現非常複雜,感覺自己能力不足無法勝任!而且也有很多也很好用的jar包,但是jar畢竟是別人的,雖說開 源,但是有幾個人能開啟裡面的程式碼從頭研究一遍,一般都是做完專案就扔到一邊,jar包功能有限,又怎

實現變數互換借助第三個變數

       變數的互換常見於陣列排序演算法中,當判斷兩個陣列元素需要互換時,將建立一個臨時變數來共同完成互換,臨時變數的建立增加了系統資源的消耗,如果需要互換的是兩個整型型別的變數,那麼可以使用更高

java 實現變數互換借助第三個變數,即中間變數、臨時變數

變數的互換常用在陣列排序演算法中,當判斷兩個陣列元素互動時,需要藉助第三個變數來實現,即需要建立一個臨時變數來共同完成互換,但是臨時變數的建立增加了系統資源的消耗,如果需要交換的是兩個整數型別的變數,

實例14 實現個變量的互換借助第3個變量

can out sys sta ann sha println true () package wjf; import java.util.Scanner; public class wjf1 { public static void main(String[

如何在介入第三個變量的情況下實現個數的交換

16px bsp file 相同 rate cli 交換 ron eclips 如何在不介入第三個變量的情況下實現兩個數的交換: 1 package myeclipseFiles2; 2 3 public class Operator { 4 5 pu

socket實現臺FTP服務器指定目錄下的文件轉移依賴第三方jar包

gets util new ram ali ftp文件 turn tps lap 通過socket實現兩臺FTP服務器指定目錄下的文件轉移,其中包含了基礎了ftp文件列表顯示、上傳和下載。這裏僅供學習用,需掌握的點有socket、ftp命令、文件流讀取轉換等 完整代碼如下:

C語言指標實現個數互換

#include <stdio.h> void change1(int a, int b)//形參與實參不是同一個變數{ int t; t = a; a = b; b = t; } void change2(int * a, int * b)//只是把兩個變數的地址儲存的位置換了,但是變數的值

C語言指針實現個數互換

c語言指針 存儲 col clu stdio.h 實現 置換 形參與實參 兩個 #include <stdio.h> void change1(int a, int b)//形參與實參不是同一個變量{ int t; t = a; a = b; b = t; }