題目內容
問題:n 只奶牛坐在一排,每個奶牛擁有 ai 個蘋果,現在你要在它們之間轉移蘋果,使得最後所有奶牛擁有的蘋果數都相同,每一次,你只能從乙隻奶牛身上拿走恰好兩個蘋果到另乙個奶牛上,問最少需要移動多少次可以平分蘋果,如果方案不存在輸出 -1。
輸入描述:每個輸入包含乙個測試用例。每個測試用例的第一行包含乙個整數 n(1 <= n <= 100),接下來的一行包含 n 個整數 ai(1 <= ai <= 100)。
輸出描述:輸出一行表示最少需要移動多少次可以平分蘋果,如果方案不存在則輸出 -1。
測試用例
輸入例子:
4 7 15 9 5
輸出例子:
3
解題思路:
1、因為是平分蘋果、因此蘋果總數必須是奶牛個數的整數倍
2、算出蘋果的平均數、用每個奶牛的蘋果減去平均數、得到每個奶牛的多出或者相差的蘋果數
3、因為每次只能移動兩個蘋果、因此每個奶牛對出或者相差的蘋果數必須是2的倍數(也就是對num % 2 == 0)
4、將相減大於0的所有蘋果相加除以2就是需要移動的次數(因為每次只能移動兩個)
**示例
#include
using
namespace std;
intmain()
if(count % size !=0)
// 判斷蘋果總數是否是奶牛總數的倍數
count = count / size;
// 計算平均數
int sum =0;
for(
int i =
0; i < size;
++i)
if(arr[i]
>=0)
// 將相減大於0的蘋果加起來
} cout <<
"次數:"
<< sum /
2<< endl;
return0;
}
問題 分蘋果
題目描述 給定一堆共n個蘋果,兩個人輪流進行如下操作 1,將這一堆蘋果分成兩堆,每堆的蘋果數目必須不同 2,另乙個人選擇其中一堆作為新的堆,開始下一輪操作。直到某個人不能滿足要求輸掉比賽,遊戲結束。假設兩個人都足夠聰明 總會選擇對自己最優的方案。比如說有3個蘋果,第乙個人只能選擇分兩堆1 2,第二個...
分蘋果(C語言實現)
果園裡有堆蘋果,n 1 n 9 只熊來分。第一隻熊把這堆蘋果平均分為n份,多了乙個,它把多的乙個扔了,拿走了乙份。第二隻熊把剩下的蘋果又平均分成n份,又多了乙個,它同樣把多的乙個扔了,拿走了乙份,第 三 第四直到第n隻熊都是這麼做的,問果園裡原來最少有多少個蘋果?示例和說明如下 我的方法很簡單就是從...
問題 分蘋果 博弈
時間限制 1 sec 記憶體限制 128 mb 給定一堆共n個蘋果,兩個人輪流進行如下操作 1,將這一堆蘋果分成兩堆,每堆的蘋果數目必須不同 2,另乙個人選擇其中一堆作為新的堆,開始下一輪操作。直到某個人不能滿足要求輸掉比賽,遊戲結束。假設兩個人都足夠聰明 總會選擇對自己最優的方案。比如說有3個蘋果...