東華oj 高階題第89題 分糖果

2021-10-04 06:17:03 字數 1756 閱讀 6096

89 分糖果

問題描述 :

肖恩和派屈克是兄弟,他們從他們的父母那裡得到了很多糖果。每一塊糖具有乙個正整數的價值,孩子們希望分他們得到的糖果。首先,肖恩將這些糖果分成兩堆,並選擇一堆給派屈克。然後,派屈克將嘗試計算每堆的價值,其中每堆的價值是那堆糖果價值的總和,如果他覺得沒有平等的價值,他將開始哭了起來。

不幸的是,派屈克太小了,所以不能正確的計算。他只會二進位制無進製的加法。比如說,他想算12(二進位制為1100)加5(二進位制為101),他會把最右邊的兩位加法算正確,但是第三位會忘記進製。(即0+0=0,0+1=1,1+0=1,1+1=0)

因此,派屈克算12加5的結果為9。下面幾個是派屈克算的結果:

5 + 4 = 1

7 + 9 = 14

50 + 10 = 56

肖恩數學很好,他想得到價值總和更高的糖果並且不讓他的弟弟哭。如果可能,他會分成兩個非空的糖果袋,讓派屈克認為,雙方都有相同的值的糖果。給你每一袋糖果每一塊糖果的價值,我們想知道是否可能讓派屈克相信他們得到糖果價值的總量是相同的。如果可能計算出肖恩能得到的最大的價值。

輸入說明 :

第一行輸入t(1每組測試資料佔一行,每行包含以下資料,n c1 c2 … cn(其中n(2 ≤ n ≤ 10)代表從父母那裡得到糖果的總數,c(1 ≤ ci ≤ 100)代表每塊糖果的價值)

輸出說明 :

若不能輸出no,若能則輸出肖恩得到的最大的價值。

輸入範例 :

25 1 2 4 5 8

3 3 5 6

輸出範例 :

no11

+++++++++++++++++++++++++這是分割線++++++++++++++++++++++++

一開始我一點思路也沒有,看了一些大佬的**才知道這道題得用異或做(我第一次用異或做題……)

/*

t89 分糖果

演算法概述:這個題的關鍵是「二進位制無進製的加法」實際上說的是異或,也就是

二進位制中的「同0異1」的操作。

先判斷所有糖果價值的異或(符號為^)是不是0,

如果是0,那麼肯定能分成「價值」

相等的兩堆(因為兩個相同二進位制數的異或為0),而如果異或結果為0,那麼肖恩

能得到的最大的價值的情況一定是「一堆放那個最小價值的,另一堆放除了最小以外的」

因為如果所有糖果價值的異或為0,那麼【最小的糖果價值】和【除了最小之外的其他

糖果】的一定是「價值」(也就是二進位制)相等的(因為如果」價值「不等的話所有

糖果的異或不可能是0),所以只需要把最小的那個揪出來把其他的加起來就是肖恩

能得到的最大的價值了

如果是1,那麼不可能分成「價值」相等的兩堆

*/#include

#define max_size 12

intmain()

;int xorsum =0;

// 糖果價值的異或和

scanf

("%d"

,&t)

;while

(t--)if

(xorsum ==0)

// 能分成價值相等的兩堆

printf

("%d\n"

, sum - min)

;else

printf

("no\n");

}return0;

}

從這道題我學到了:

東華oj 基礎題第89題

89 字串壓縮 問題描述 通過鍵盤輸入字母 a z a z 組成的字串,字串長度不超過1000。首先將所有字母統一成小寫字母,然後將字串中連續出現的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1 僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複字元,壓縮後的字串還是 abcbc 2...

東華oj 高階題第11題

11 abc數字 問題描述 明明的爸爸是一位著名的數學家同時也是一位著名的數學啟蒙老師。他經常出一些簡單而有趣的數學題目來給剛剛接觸數學的小朋友做,培養他們對數學的興趣。一天,明明的爸爸想到了這樣乙個題目。如果有a b c三個1位的正整數,那麼按以下的方法構成2個三位數 第一種方法是a為百位,b為十...

東華oj 高階題第21題

21 回文質數 問題描述 因為151既是乙個質數又是乙個回文數 從左到右和從右到左是看一樣的 所以 151 號是回文質數。寫乙個程式來找出範圍 a,b 5 a b 100,000 間的所有回文質數 輸入說明 僅 1 行 二個整數 a 和 b 5 a b 100,000 輸出說明 輸出乙個回文質數的列...