位運算習題 單獨的數字

2021-08-20 03:32:27 字數 856 閱讀 5394

給定乙個陣列 a

a,除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。

如:,找出 77。

你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦~

第一行輸入乙個數 n(1≤n≤500)n(

1≤n≤

500)

,代表陣列的長度。

接下來一行輸入 n

n 個 int 範圍內(−2147483648…2147483647−2

1474

8364

8…21

4748

3647

)的整數,表示陣列 a

a。保證輸入的陣列合法。

輸出乙個整數,表示陣列中只出現一次的數。

解題思路:

看到三個數字相同的題,我們不難聯想到兩個數字相同即可用「^」運算解出那個單獨的數,但是我並不了解有三個數的位運算為0的運算子,所以題讓我們自己建立這個運算子。

於是,模擬不難想到:我們可以建立個sum[32]陣列代替2進製,

主要函式: sum[j]+=x>>j&1;  //表示將x右移j位,並與「0001」進行與運算,得到他原本二進位制數中從右往左第j+1位數

sum[j]%=3;    //將值輸入這個構造的陣列(%3==0說明這個點有三個數了)

ans+=sum[i]《二進位制數中前移b位

#include

#include

#include

#include

using namespace std;

int main()

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

printf("%d\n",ans);

}

單獨的數字 位運算

時間限制 1000ms 記憶體限制 65536k 給定乙個陣列 a 除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。如 找出 7 你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦 第一行輸入乙個數 n 1 n 5 00 代表陣列的長度。接下來一行輸入 n 個 int 範圍內 2...

計蒜客 單獨的數字(位運算)

給定乙個陣列 a,除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。如 找出 7。你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦 輸入格式 第一行輸入乙個數n 1 n 500 代表陣列的長度。接下來一行輸入 n 個 int 範圍內 2147483648 2147483647 的...

簡單的演算法問題8 單獨的數字(位運算)

此演算法均是用c 編寫 此題目均是來做計蒜客 給定乙個陣列 a,除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。如 找出 7。你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦 第一行輸入乙個數 n 1 n 500 代表陣列的長度。接下來一行輸入 n個 int 範圍內 21474...