1. 程式人生 > >交換兩個數的四種方法

交換兩個數的四種方法

一.建立臨時變數

       1.普通的方法:

                 思路簡介:建立一個臨時變數,通過temp=a,a=b,b=temp來實現交換。

                 缺點:這只是一種假交換,由於這只是在函式內部臨時變數間的交換,所以當函式退出,函式棧幀被釋放,原本的值並沒有交換。

                 具體方法:

                                    int swap(int _x,int _y)

                                   {

                                       int  z=_x;                                                            //通過建立z這個臨時變數來交換_x,_y
                                       _x=_y;
                                       _y=z;
                                      printf("%d %d",_x,_y);
                                      return 0;

                                  }

        2.指標的方法:

                   思路簡介:取兩個數的地址,在swap方法中再用指標指向地址交換,這時候為數值交換(函式呼叫結束後原空間的值也得到了交換)。

                   具體方法:

                                   int swap(int *_x,int *_y)                                     //主函式中把兩個數的地址傳過來
                                  {
                                       int  tmp = *_x;                                                  //定義中間變數 然後交換兩個數
                                       *_x = *_y;
                                      *_y = tmp;
                                      printf("%d %d",*_x,*_y);
                                   }

二.不建立臨時變數

        1.加減交換:

                   思路簡介:取兩個數的和,然後通過減去另外一個數來得到這個數

                   方法缺陷:兩個數的和可能會越界。(數值小的時候可以用)。同樣的這是一種假交換,函式呼叫結束後原本的值並沒有真正的交換。

                   具體方法:

                                 int  swap(int _a,int _b)
                                {
                                     printf("%d %d",_a+_b-_a,_a+_b-_b);
                                     return 0;
                               }

          2.異或方法:

                      思路簡介:通過二進位制異或方法交換,如a=3二進位制為11,b=2的二進位制為10,按位異或(兩個值相同為0,否則為1)

                                          a=a^b,                異或後a=11^10=01

                                          b=a^b,                異或後b=01^10=11(此時b為開始a的值)

                                          a=a^b                 異或後a=01^11=10(此時a為開始b的值)

                                          這樣子a與b就實現了交換

                      具體方法:

                             int Swap3(int *a, int *b)
                            {
                                *a = *a^*b;
                                *b = *a^*b;
                                *a = *a^*b;
                                printf("%d %d", *a, *b);
                                return 0;
                             }

相關推薦

交換個數方法

一.建立臨時變數        1.普通的方法:                  思路簡介:建立一個臨時變數,通過temp=a,a=b,b=temp來實現交換。                  缺點:這只是一種假交換,由於這只是在函式內部臨時變數間的交換,所以當函式退出

交換個數的幾方法

code alt pre temp emp 分享圖片 splay lin ons 第一種:利用第三方變量 1 int a = 10, b = 12; 2 int temp = 0; 3 temp = a; 4 a = b; 5 b = temp; 6 Console.W

個變數交換方法(Java)

對於兩種變數的交換,我發現四種方法,下面我用Java來演示一下。 1.利用第三個變數交換數值,簡單的方法。 (程式碼演示一下) 1 class TestEV 2 //建立一個類 3 { 4 public static void main(String[]args) 5

交換個變數的值,不借助第三個變數的方法(學習)

缺點:是隻能用於數字型別,字串之類的就不可以了。a+b有可能溢位(超出int的範圍),溢位是相對的, +了溢位了,-回來不就好了,所以溢位不溢位沒關係,就是不安全。2) 指標地址操作         因為對地址的操作實際上進行的是整數運算,比如:兩個地址相減得到一個整數,表示兩個變數在記憶體中的儲存位置隔了

方法交換個數的值

第一種,也是最原始的方法,使用中間變數,將a與b的值進行交換#include<stdio.h>int main(){ int a = 10; int b = 20; int c = 0; printf("交換之前:%d %d", a, b); c = a; a =

數據庫表連接方法

null nbsp _id 連接查詢 from where ext 左右 true 一般我們連接兩張表時,都是select xxx,xx from x1,x2 where x1.a=x2.a。其實數據庫還有4中join操作。 例如:表1: student s_id na

C語言中用不同的方法交換個數的值

  在開始學習C語言的過程中,我們一定都做過這樣一道題,交換兩個數的值。可能大部分人都會這道題,但今天我想試試用不同的方法做這道題。   1、建立臨時變數 #include<stdio.h> int main() { int a = 10

c#呼叫python的方法(嘗試了,只詳細講解本人成功的後,其餘方法只列出,詳細用法請自行谷歌百度)

一、使用c#,nuget管理包上下載的ironPython安裝包      嘗試後發現,對引用了numpy等第三方庫的python程式碼,會報找不到模組xxx的錯誤,上網查證後發現此問題基本難以解決 二、使用c++程式呼叫python檔案,然後將其做成動態連結庫

辯證法中包括一個關係、大特徵、三大規律、方法、五對範疇

辯證關係: 一、辨證關係原理 (一)物質和意識的辨證關係原理 (1)辨證唯物論認為,物質決定意識,意識是物質的反映。這一原理要求我們想問題辦事情必須做到一切從實際出發,使主觀符合客觀。 (2)意識對物質具有反作用,正確的意識能促進客觀事物的發展,錯誤的意識則阻礙客觀事物的發

比較個數的大小,交換個數方法總結

面試寶典中看到的,記錄下來,與大家共勉 1、比較兩個數的大小 /*比較兩個數的大小,不要使用if判斷*/ #include <stdio.h> #include <math.h> int main() { int a, b; pri

JAVA儲存位小數點的方法

import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class format {   double f = 111231.55

C語言編程 求個數的平均值方法(三方法

輸入 均值 二進制 介紹 運算 use pause can include 第一種方法是最常見的average=(a + b) / 2這種方式,求兩個數的平均值 第二種方法是當 a<b 時averag=a+(b-a)/2 這裏著重介紹的是第三種方法 average=(

探討JS合並個數組的方法

table 調用 情況 num body lpad java 遍歷 ber  我們在項目過程中,有時候會遇到需要將兩個數組合並成為一個的情況。   比如: 1 2 var a = [1,2,3]; var b = [4,5,

增加表空間大小的方法

已存在數據 max 方法 手工 pro strong 增加表空間 增加 四種 增加表空間大小的四種方法Meathod1:給表空間增加數據文件ALTER TABLESPACE app_data ADD DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\OR

Python格式化輸出的方法

python#!/usr/bin/env python#coding:utf-8name = raw_input("name:")sex = raw_input("sex:")age = int(raw_input("age:"))info0 = ‘‘‘-------- inio fo0 -------nam

Button點擊事件的方法

ase extend extends make androi tid ont edi .get 1、匿名內部類 Button btn_1 = (Button) findViewById(R.id.btn_1); //1.匿名內部類 btn_

【mysql】查看版本的方法

span clas latin min days use ble dha pre 1:在終端下:mysql -V。 以下是代碼片段: [[email protected]/* */ ~]$ mysql -V mysql Ver 14.7 Distrib 4.

列表整體加1方法

append map 整體 num enume for in rate int pen 1、 list = [0,1,2,3,4,5,6,7,8,9] num = map(lambda x:x+1,list)print num 2、list1=[]for i in lis

遍歷Map的方法

html pos val 方法 div body put next shm public static void main(String[] args) { Map<String, String> map = new HashMap<String,

JS 數組去重的方法

new return obj 元素 數組去重 != lis 相同 break 1、通過遍歷原數組和新數組是否重復。new一個新數組存放已經遍歷過的、唯一的元素。 function uniqueArr(list){   var newArr= [list[0]];   for