如何將a、b的值進行交換,並且不使用任何中間變數?
可以採用a、b之間的加減運算來實現:
a = a + b;
b = a- b;
a = a - b;
這樣做的缺點是如果a、b是比較大的兩個數,進行相加求和時就會超界。
用異或(位運算子^,也即互斥,對應位只有一個為1時結果為1,否則為0)則不用擔心越界問題:
a = a^b;
b = a^b;
a = a^b;
注:
摘自《程式設計師面試寶典》
相關推薦
如何將a、b的值進行交換,並且不使用任何中間變數?
可以採用a、b之間的加減運算來實現: a = a + b; b = a- b; a = a - b; 這樣做的缺點是如果a、b是比較大的兩個數,進行相加求和時就會超界。 用異或(位運算子^,也即互斥,對應位只有一個為1時結果為1,否則為0)則不用擔心越界問題:
不使用任何中間變數如何將a、b的值進行交換
此題主要是考察工作經驗,在日常工作中經驗遇到記憶體不夠的情況,在記憶體不夠的情況,怎麼不使用中間變數使兩個變數的值進行交換呢? 程式碼實現: #include<stdio.h> #include <stdlib.h> void swap1(int&
不用中間變數,交換a、b值
如果要交換a、b之間的值,一般的做法是: tmp=a;a=b;b=tmp;這種方法不得不使用一個臨時變數。 從網上學來一個方法,可以不用使用臨時變數: a^=b^=a^=b; 這樣計算之後,就可以交換a、b值
面試- 阿里-. 大資料題目- 給定a、b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4G,讓你找出a、b檔案共同的url?
假如每個url大小為10bytes,那麼可以估計每個檔案的大小為50G×64=320G,遠遠大於記憶體限制的4G,所以不可能將其完全載入到記憶體中處理,可以採用分治的思想來解決。 Step1:遍歷檔案a,對每個url求取hash(url)%1000,然後根據所取得的
面試題36:不使用額外空間將A、B兩連結串列元素交叉歸併
#include "stdafx.h" #include <iostream> using namespace std; //定義結點型別 struct Node { int m_value;//結點值 Node* m_next;//指向下一個結點的指標
a=15,b=2,如何不通過其他變數和=符號交換a、b的的值
不能通過=符號交換的話,也就是說不能用其他變數去取儲存兩者值了。於是馬上想到了異或運算子:^ a = 15 二進位制:1111 b = 2 二進位制:0010 a = a ^ b = 1101 = 13 b = b ^ a = 1111 = 15 a = a
開啟3個線程,這3個線程的ID分別為A、B、C,每個線程將自己的ID在屏幕上,要求輸出結果必須按ABC的順序顯示:ABCABC
abc multi adf ++ include vol form 主線程 tdi 1 #include <stdio.h> 2 #include <process.h> 3 #include <windows.h> 4 5
設A和B是兩個按元素值遞增有序的單鏈表,寫一算法將A和B歸並為按按元素值遞減有序的單鏈表C,試分析算法的時間復雜度。(利用上篇帶有頭結點的線性鏈表操作)
遞增 else 長度 初始化 get b- sizeof int insert #include <stdio.h>#include <malloc.h>typedef int DataType;#include "LinList.h" void
從鍵盤輸入三個整數a、b、c,要求將輸出的資料按從大到小排序後輸出。
#include<stdio.h> int main() { int a,b,c,t; scanf("%d%d%d",&a,&b,&c); if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t
給出一百分制成績,要求輸出成績等級‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上為A, 80-89分為B, 70-79分為C, 60-69分為D, 60分以下為E 。 將下面的程式填寫完整。
題目描述 給出一百分制成績,要求輸出成績等級‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上為A, 80-89分為B, 70-79分為C, 60-69分為D, 60分以下為E 。 將下面的程式填寫完整。 #include <stdio.h> int main() {
給定兩個整型變數的值,將兩個值得內容進行交換。
1.利用新的變數進行替換,程式碼如下: int main() { int a = 10; int b = 90; int tmp = 0; tmp = a; a = b; b = tmp; printf("%d %d", a, b);
求方程 的根,用三個函式分別求當b^2-4ac大於0、等於0、和小於0時的根,並輸出結果。從主函式輸入a、b、c的值。
解題思路: 一元二次方程 ax²+bx+c=0(a≠0) 其求根依據判定式△的取值為三種( △=b²-4ac ) 1. △>0,方程有兩個不相等的實數根; x1=[-b+√(△)]/2a; //(
編寫一個程式,開啟3個執行緒,這3個執行緒的ID分別為A、B、C,每個執行緒將自己的ID在螢幕上列印10遍
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <string.h> //#define DEBUG 1 #d
編寫一個程式,開啟3個執行緒,這3個執行緒的ID分別為A、B、C,每個執行緒將自己的ID在螢幕上列印10遍,要求輸出結果必須按ABC的順序顯示;如:ABCABC….依次遞推。
#include <stdio.h> #include <pthread.h> #include <stdlib.h> #define NUM 10 pthread_mutex_t mutex; pthread_cond_t cond
不使用中間變數,交換int型的 a, b兩個變數的值
(function(){ var a = 10, b = 2; a = a + b; b = a - b; a = a - b; alert(a+" "+b); })(); (function(){ var a = 10,b=2; a = a^b;
Java:兩個乒乓球隊進行比賽,各出三人。甲隊為A、B、C三人,乙隊為X、Y、Z 三人,已經抽籤決定了比賽名單。已知A 不和X 比,C 不和X、Z 比,請問比賽名單是什麼。
兩個乒乓球隊進行比賽,各出三人。甲隊為A、B、C三人,乙隊為X、Y、Z 三人,已經抽籤決定了比賽名單。已知A 不和X 比,C 不和X、Z 比,請問比賽名單是什麼。 package com.jredu.ch0402.exer; /** * 兩個乒乓球隊進行比賽,各出三人。
編寫一個程式,開啟3個執行緒,這3個執行緒的ID分別為A、B、C,每個執行緒將自己的ID在螢幕上列印10遍,要求輸出結果必須按ABC的順序顯示;如:ABCABC
package test1; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.R
交換a、b的值temp = a; a = b; b = temp;比a = a^b;b = a^b;a = a^b;快
先看程式碼,交換a、b的值十億次<span style="font-size:14px;"> int a=222; int b=111; int size = 1000000000; int temp=0; long start = Sy
1079: C語言程式設計教程(第三版)課後習題8.2---求方程 的根,用三個函式分別求當b^2-4ac大於0、等於0、和小於0時的根,並輸出結果。從主函式輸入a、b、c的值。【兩種方法】
題目描述 求方程 的根,用三個函式分別求當b^2-4ac大於0、等於0、和小於0時的根,並輸出結果。從主函式輸入a、b、c的值。 輸入 a b c 輸出 x1=? x2=? 樣例輸入 4
問題三十:將輸入的任意三個整數a、b、c,按從小到大的順序輸出
/* 程式頭部註釋開始(為避擴音交博文中遇到的問題,將用於表明註釋的斜槓刪除了) * 程式的版權和版本宣告部分 * All rights reserved. * 檔名稱: txt.c * 作 者: liuyongshui * 問 題