硬币之谜:如何用最少的步骤拿完所有硬币?

在这里插入图片描述

本篇博客会讲解力扣“LCP 06. 拿硬币”的解题思路,这是题目链接。

先来审题:
在这里插入图片描述
本题的思路是:分开计算每一堆硬币最少的拿取次数,再求和。

假设某一堆硬币的个数是x,则最少的拿取次数要考虑x是奇数还是偶数。

  1. 若x是偶数,则每次拿取2个硬币,拿取次数是x/2。
  2. 若x是奇数,则每次拿取2个硬币,直到只剩1个硬币,再拿走最后1个硬币即可,拿取次数是x/2+1。

统一以下,拿取次数是x/2+x%2或者(x+1)/2。

代码如下:

int minCount(int* coins, int coinsSize){int ret = 0;// 计算每一堆硬币最少拿几次,再求和for (int i = 0; i < coinsSize; ++i){//ret += coins[i] / 2 + coins[i] % 2;ret += (coins[i] + 1) / 2;}return ret;
}

在这里插入图片描述
轻松通过。

总结

对于奇偶数分类讨论的情况,可以考虑取模,或者“加1后再除2”。

感谢大家的阅读!


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部