位運算小手段巧解 操作 例題

2021-10-02 12:15:37 字數 2047 閱讀 9780

位運算有好多應用,限於篇幅 懶吶 這裡只列舉了一部分,整理好再補充

1.交換兩個數(不需額外變數)

#includeusing namespace std;

int main()

ps:128 :1000 0000

127 :0111 1111

3.判斷乙個數是否為偶數

如果乙個數是偶數,那麼這個數的二進位制數的最後一位為0,和1做與運算結果為0,反之,結果為1.

if(n & 1 )
多數時候判斷奇偶性的**如下:

if(!(n % 2))
但是位運算更快

4.找出不重複的數今天的重頭戲

x ^ y ^ y = x;

經過一段時間的緊張籌備,電腦小組的「rp餐廳」終於開業了,這天,經理lxc接到了乙個定餐大單,可把大家樂壞了!員工們齊心協力按要求準備好了**正準備派送時,突然碰到乙個棘手的問題,筷子!cx小朋友找出了餐廳中所有的筷子,但遺憾的是這些筷子長短不一,而我們都知道筷子需要長度一樣的才能組成一雙,更麻煩的是cx找出來的這些筷子數量為奇數,但是巧合的是,這些筷子中只有乙隻筷子是落單的,其餘都成雙,善良的你,可以幫cx找出這只落單的筷子的長度嗎?

輸入格式

第一行讀入乙個數n,它代表cx找到的筷子的根數。

第二行是n個用空格隔開的數,代表筷子的長度。

輸出格式

一行,落單的筷子的長度。

輸入輸出樣例

輸入 #1

92 2 1 3 3 3 2 3 1

輸出 #1

說明/提示

對於60%的資料,n<=100001;

對於100%的資料,n<=10000001,筷子長度不大於 10^9。

記憶體限制4mb

分析:首先可以發現記憶體限制,所以最簡單直接的桶排就不太友好,而這題如果用位運算的話,完全不用擔心記憶體問題啦。話不多說,上**。

#includeint main() 

std::cout《說明:

你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?

示例 1:

輸入: [2,2,3,2]

輸出: 3

示例 2:

輸入: [0,1,0,1,0,1,99]

輸出: 99

#includeint x, sum, a[32];

int main()

}for(int i = 0; i < 32; ++i)

}printf("%d",sum);

}

這一天學校組織了乙個遊戲,找找誰才是倒霉蛋。

題目描述

分別讓n個人每個人都拿乙個號碼a[i] (i < n && a[i] < 2^31),每兩個人之間相互看號碼,如果號碼相同的話就可以一起出去,否則還必須接著看其他人的,這個遊戲保證最後1個人或者2個留下來。

輸入格式

第一行兩個數 n,k (n≤3000000,1≤k≤2),n表示參加遊戲的人數,接下來 n行每行乙個正整數表示遊戲上每乙個人的密碼,k表示最後留在遊戲的人數。

輸出格式

從小到大輸出一行 k個數,表示最後留在遊戲裡的倒霉蛋,中間用空格分隔.

輸入輸出樣例

輸入 #1

3 12 2 2

輸出 #1

#includeusing namespace std;

const int n = 3e6 + 6;

int a[n];

int re[2];

int main()

cout<>a[i];;

t ^= a[i];

}t &= -t;

for(int i = 1; i <= n; ++i) else

}if(re[0] > re[1]) swap(re[0], re[1]);

cout<}

return 0;

}

一些工作中常用的小手段

conda 在實驗室的伺服器上安裝conda 這裡要注意實驗室的伺服器上本來是有conda的,但應該每乙個使用者自己安乙個,這樣別人就不會進到你建立的虛擬環境中,這個教程非常棒!批量匯出包含環境中所有元件的requirements.txt檔案 conda list e requirements.tx...

位運算(1) 初識位運算

前段時間數電課學了些進製轉換,還有與或非等邏輯運算,如今再來看看位運算,倒輕鬆了不少。很早就想寫些非總結性部落格了,奈何還是太懶。也也不知怎的突然又來了興致,趕忙寫下這篇部落格。廢話不多說,今天準備總結總結關於位運算的知識。程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的,即0 1兩種狀態,...

位運算子和位運算

一 按位與 運算子 1 運算規則 參加運算的兩個 資料,按二進位進行 與 運算,如果兩個相應的二進位都為1,則該位的結果值為1,否則為0,即 0 0 0,0 1 0,1 0 0,1 1 1.2 用途 1 清零 運算物件 原來的數中為1的位,新數中相應位為0。2 取乙個數中某些指定位。如想要取乙個整數...