二進位制列舉

2021-10-02 15:56:52 字數 2879 閱讀 1063

一、二進位制操作

算數字運算:

a=60(0011 1100)

b=13(0000 1101)

1.與(&):兩個二進位制數,同 1為 1,否則為 0。 a & b=12(0000 1100)

2.或(|):兩個二進位制數,同 0為 0,否則為 1。 a | b=61(0011 1101)

3.非 按位取反(~):對二進位制每一位進行了一次取反操作,若二進位制數字0,則變成1,否則變成0。

~a=195(1100 0011)

4、異或運算(∧):兩個二進位制數,同為0,異為1。

異或性質:對於異或乙個非常重要的性質,對於乙個值異或同乙個值兩次,則結果還是原值。

移位操作符:

1、左移<< :二進位制中的左移一位就是十進位制中乘二。

2、右移<< :二進位制中的右移一位就是十進位制中除以二,捨去餘數。

二、二進位制列舉

.原理:

1.利用的是二進位制下n位長度的數有2^n,即有這麼多種情況;

2.對乙個二進位制來說 1 代表取這個元素 0代表不取這個元素;

3.利用迴圈,選取符合條件的情況;

題目

problem a(異或):teacher li

nefu 643

/*思路:輸入第乙個名字為 a,其他都為 b,然後每個 b 和 a 異或*/

**#include

#include

using

namespace std;

char a[31]

,b[31];

/*在main之外定義字串,在字串結尾'/0'之後的ascii值才能自動清為 0*/

intmain()

printf

("scenario #%d\n"

,flag)

;printf

("%s\n\n"

,a);

}return0;

}**

problem b (異或):find different

nefu 1172

```cpp

#include

#include

using

namespace std;

intmain()

printf

("%d\n"

,a);

}return0;

}

problem c:和為k–二進位制列舉

nefu 1205

#include

#include

using

namespace std;

intmain()

if(sum==k)}if

(flag==0)

printf

("no\n");

}return0;

}

problem d:陳老師加油-二進位制列舉

nefu 1505

#include

#include

using

namespace std;

intmain()

/*記錄遇到加油站的次數*/

else}if

(flag1==

5&&flag2==

10&&d==0)

sum++;}

printf

("%d\n"

,sum);}

return0;

}

problem e:紙牌遊戲-二進位制-搜尋

nefu 1518

#include

#include

intmain()

if(s==k)

flag++;}

printf

("%d\n"

,flag);}

return0;

}

problem f:權利指數

nefu 1641

#include

#include

intmain()

memset

(s,0

,sizeof

(s))

;/*使 s 陣列初始值都為0*/

for(i=

0;i<(1

<;i++

)/*flag用來標記a[j]是否取過*/}if

(sum<=m/2)

}}for(i=

0;i1;i++

)printf

("%d "

,s[i]);

printf

("%d\n"

,s[n-1]

);}return0;

}

problem g:趣味解題

nefu 1285

#include

#include

intmain()

ants=0;

for(i=

0;i<

1<)else

p=p*e[j];}

if(flag==x)

ants=ants+p;

}printf

("%.4lf\n"

,ants);}

return0;

}

二進位制列舉

fliptile 乙個反轉問題,大意是一頭牛要反轉木板,木板有黑和白,全部翻成白色的反法 輸出。小蒟蒻根本想不到 參考了大佬的部落格。點此轉入 把第一行的全部翻法都試一遍,然後看哪種的步數最少。好難想。include include int maze 20 20 int t 20 20 int f ...

二進位制列舉

讓我們從乙個題目入手 從乙個大小為n的整數集中選取一些元素,使得它們的和等於給定的值t。每個元素限選一次,不能乙個都不選。關於這個題目,我們很容易想到的便是對所有元素進行暴力搜尋,然後進行剪枝便可。下面我將介紹二進位制列舉的思路和流程來巧妙的解決這個問題。對任一數來說,所面臨的問題是取或不取,在二進...

二進位制列舉

題目鏈結 題意 總共有3x3盞燈,每次切換乙個燈還會同時改變上下左右的燈,問想把燈全部開啟最少需要操作多少次 輸入 乙個3x3的矩陣 分析 操作順序對題目是不影響的,另外,操作奇數次等價於1次,偶數次等價於2次,也就是說最大操作次數是9次 分析題目我們可以發現題目資料規模並不大,可以暴力列舉,並且燈...