桌上有 n 堆硬幣,每堆的數量保存在數組 arr 中。咱們每次能夠選擇任意一堆,拿走其中的一枚或者兩枚,求拿完全部硬幣的最少次數。web
示例 1:算法
輸入:[4,2,1]數組
輸出:4svg
解釋:第一堆硬幣幣最少須要拿 2 次,第二堆最少須要拿 1 次,第三堆最少須要拿 1 次,總共 4 次便可拿完。測試
示例 2:spa
輸入:[2,3,10]
int TakeCoin(vector& coin)
{
int cnt = 0;
for (auto c : coin)
{
cnt += c / 2; // 前幾回都拿兩枚硬幣
cnt += c % 2; // 不夠兩枚,拿一枚
}
return cnt;
}
輸出:8code
算法一:xml
int minCount(int* arr, int num) { int i, count = 0; for (i = 0;i < num;i++) { if (arr[i] % 2 != 0)//不能整除 次數+1 { count += (arr[i] + 1) / 2; } else { //整除 count += arr[i] / 2; } } return count; }
算法二:token
int TakeCoin(vector<int>& coin) { int cnt = 0; for (auto c : coin) { cnt += c / 2; // 前幾回都拿兩枚硬幣 cnt += c % 2; // 不夠兩枚,拿一枚 } return cnt; }
測試測試用例:string
int main() { vector<int> coin1 = { 4,2,1 }; auto ret1 = TakeCoin(coin1); vector<int> coin2 = { 2,3,10 }; auto ret2 = TakeCoin(coin2); cout << ret1 << " " << ret2 << endl; return 0; }