C语言——拿硬币(力扣2020春季周赛题)
桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。
示例 1:
输入:[4,2,1]
输出:4
解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。
示例 2:
输入:[2,3,10]
输出:8
限制:
1 <= n <= 4
1 <= coins[i] <= 10
解题思路:直接依次遍历每一堆硬币,拿走一或者二枚硬币,即分为偶数和奇数,偶数直接除以2加入count内,奇数则除以2再加上1即可。
代码:
int minCount(int* coins, int coinsSize){
int count=0;
int i;
for(i=0;i<coinsSize;i++)
{
while(coins[i]!=0)
{
if(coins[i]%2==0)
{
count+=coins[i]/2;
coins[i]=0;
}
if(coins[i]%2!=0)
{
count+=coins[i]/2+1;
coins[i]=0;
}
}
}
return count;
}