题解 | #硬币兑换#

硬币兑换

https://www.nowcoder.com/practice/4f900b1c941c45288dba06baa006907f

解题思路

  1. 题目要求用 面值的硬币凑出目标金额
  2. 需要同时满足两个优化目标:
    • 使用的不同面值种类尽可能多
    • 在种类最多的情况下,使用的硬币总数尽可能多
  3. 解题策略:
    • 从小到大遍历每种面值(除1元外)
    • 如果剩余金额大于等于当前面值,则使用该面值
    • 使用1元硬币补齐剩余金额

代码

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    int coins[] = {2, 5, 10, 20, 50, 100};
    int typeCount = 1;  // 已经包含1元硬币
    int remaining = n - 1;  // 减去一个1元硬币
    int totalCoins = n;  // 初始假设全用1元
    
    // 尝试使用每种面值的硬币
    for(int i = 0; i < 6; i++) {
        if(remaining < coins[i]) {
            break;
        }
        typeCount++;
        remaining -= coins[i];
        totalCoins = totalCoins - coins[i] + 1;
    }
    
    cout << typeCount << " " << totalCoins << endl;
    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        int[] coins = {2, 5, 10, 20, 50, 100};
        int typeCount = 1;  // 已经包含1元硬币
        int remaining = n - 1;  // 减去一个1元硬币
        int totalCoins = n;  // 初始假设全用1元
        
        // 尝试使用每种面值的硬币
        for(int i = 0; i < 6; i++) {
            if(remaining < coins[i]) {
                break;
            }
            typeCount++;
            remaining -= coins[i];
            totalCoins = totalCoins - coins[i] + 1;
        }
        
        System.out.println(typeCount + " " + totalCoins);
    }
}
n = int(input())

coins = [2, 5, 10, 20, 50, 100]
type_count = 1  # 已经包含1元硬币
remaining = n - 1  # 减去一个1元硬币
total_coins = n  # 初始假设全用1元

# 尝试使用每种面值的硬币
for coin in coins:
    if remaining < coin:
        break
    type_count += 1
    remaining -= coin
    total_coins = total_coins - coin + 1

print(f"{type_count} {total_coins}")

算法及复杂度

  • 算法:贪心算法
  • 时间复杂度: - 硬币面值种类是固定的,只需遍历一次
  • 空间复杂度: - 只需要常数级别的额外空间
全部评论

相关推荐

07-25 13:42
门头沟学院 Java
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-23 14:10
柴子木:找个工作你还发上脾气了🤣
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务