JYU程式設計決賽題解與思考(更新中)

2022-07-11 00:51:12 字數 2758 閱讀 5349

被綠的小華

題目大意就是給出乙個01串表示的二進位制數是否為3的倍數。

方法1:暴力

直接用快速冪暴力求解,求解的過程中同時模3。

1 #include2 #include3 #include

4 #include5 #include6 #include7

#define maxn 10000

8#define int long long

9#define mod 3

10using

namespace

std;

11int n,m,ans=0;12

inta[maxn];

13 inline int pow_(int x,int

n)21

return cnt%mod;22}

23signed main()

2432}33

if(ans==0) cout<

<

34else cout<

<

35return0;

36 }

暴力方法2:數學二進位制數的奇數字1的個數與偶數字1的個數的差能被3整除,則這個數是3的倍數。

1 #include2 #include3 #include4 #include

5 #include6 #include

7 #include8 #include9 #include10 #include11 #include12 #include13

#define sc scanf

14#define pr printf

15#define maxn 10001

16#define inf 9999999999

17#define endd puts("");

18#define int long long

19#define il inline

20#define pi 3.1415926535898

21#define inf_min -214783647

22using

namespace

std;

23 il int

read()

27while (ch>='

0'&&ch<='

9')

28return s *f;29}

30/*

*****************************head****************************************

*/31

int pow_(int a,int

n)39

return

cnt;40}

41signed main()

4251}52

if(abs(num1-num2)%3==0) cout<

;53else cout<

;54return0;

55 }

數學證明:對於二進位制數的偶數字:2^0%3=1;

2^2=2^0*4;

2^2%3=(2^0%3)*(4%3)=(2^0%3)*1=2^0%3=1;

則2^2%3==2^0%3;

2^4%3=(2^2%3)*(4%3)=(2^2%3)*1=2^2%3=2^0%3=1;

則2^4%3==2^2%3==2^0%3;

以此類推

(2^2n)%3=2^(2(n-1))%3*(4%3)=2^(2(n-1))%3*1=2^(2(n-2))%3*(4%3)……=2^(2(n-n))%3*4%3=2^0*(4%3)=2^0*1=1*1;

得(2^2n)%3=2^0*1=1;

而二進位制數的奇數字同理可證得(2^(2n+1))%3=2^1%3=2;

從而得出乙個二進位制數的奇數字%3為2,二進位制數的偶數字%3為1;

奇數字1的個數與偶數字1的個數的差有兩種情況:

(1)奇數字1的個數與偶數字1的個數相等;

若乙個二進位制數有n個奇數字的1,m個偶數字的1,且n=m,由上面證得的結論可知二進位制數的奇數字%3為2,偶數字%3為1;

則這個二進位制數%3的值為n(1+2)%3=3n%3=0,這個二進位制數能被3整除;

(2)奇數字1的個數與偶數字1的個數不等;

若乙個二進位制數有n個奇數字的1,m個偶數字的1,且n>m,由上面證得的結論可知二進位制數的奇數字%3為2,偶數字%3為1;

則這個二進位制數%3的值為m(1+2)%3+(n-m)*2%3,若n-m%3==0,則(n-m)*2%3==0,可得結論若奇數字的1大於偶數字的1的個數且個數差為3的倍數,則該二進位制數是3的倍數;

若乙個二進位制數有n個奇數字的1,m個偶數字的1,且n

則這個二進位制數%3的值為n(1+2)%3+(n-m)*1%3,若n-m%3==0,則(n-m)*1%3==0,可得結論若奇數字的1小於偶數字的1的個數且個數差為3的倍數,則該二進位制數是3的倍數;

綜上所述可證得:二進位制數的奇數字1的個數與偶數字1的個數的差能被3整除,則這個數是3的倍數。

LeetCode第283題解法與思考

第283題的要求如下 給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。題目的難點在於,不能使用額外的記憶體空間,必須在原陣列上操...

C語言程式設計 陣列 習題解答(持續更新)

最近在複習c語言,把部分習題寫一下。每道題由乙個函式完成,僅需在main函式中呼叫即可 有空再把注釋和解題思路寫一下 基本和書上的思路一致 print all prime number between 1 to n void prime eratosthenes int n num 1 0 1 is...

關於快取設計思考與實踐 持續更新中

減少資料庫壓力 提公升訪問速度 1.時間依賴 2.檔案依賴 3.資料庫依賴 4.操作依賴 自已定義的 1 key的管理,如何保證唯一,並最新 參考解決 gethash 2 增刪改查操作如何保證獲取的資料為最新資料 3 分頁列表的快取如何處理 4 防止雪崩即失效時間一致,而導致的資料量讀寫 參考解決 ...