发布时间:2024-10-10 23:33:17
本内容由, 集智数据集收集发布,仅供参考学习,不代表集智官方赞同其观点或证实其内容的真实性,请勿用于商业用途。
贪心算法(GreedyAlgorithm)是一种在每一步选择中都做出最优选择的算法,目的是为了全局最优。以下是用C语言、Python和Java编写的贪心算法示例,解决经典的“找零问题”:即给定不同面值的硬币,最少用几枚硬币来找零。
1. 基于C语言的贪心算法
#include <stdio.h>
// 定义硬币面值
int coins[] = {25, 10, 5, 1};
// 贪心算法实现找零问题
void findMinCoins(int amount) {
int count = 0;
// 遍历每种硬币面值
for (int i = 0; i < 4; i++) {
// 使用尽可能多的当前面值硬币
int num_coins = amount / coins[i];
amount -= num_coins * coins[i];
count += num_coins;
// 输出当前面值硬币的数量
if (num_coins > 0) {
printf("使用%d枚%d面值的硬币\n", num_coins, coins[i]);
}
}
printf("最少使用硬币总数: %d\n", count);
}
int main() {
int amount;
printf("请输入需要找零的金额: ");
scanf("%d", &amount);
findMinCoins(amount);
return 0;
}
2. 基于Python的贪心算法
# 定义硬币面值
coins = [25, 10, 5, 1]
def find_min_coins(amount):
count = 0
for coin in coins:
# 使用尽可能多的当前面值硬币
num_coins = amount // coin
amount -= num_coins * coin
count += num_coins
# 输出当前面值硬币的数量
if num_coins > 0:
print(f"使用{num_coins}枚{coin}面值的硬币")
print(f"最少使用硬币总数: {count}")
# 输入金额
amount = int(input("请输入需要找零的金额: "))
find_min_coins(amount)
3. 基于Java的贪心算法
import java.util.Scanner;
public class GreedyChange {
// 定义硬币面值
static int[] coins = {25, 10, 5, 1};
// 贪心算法实现找零问题
public static void findMinCoins(int amount) {
int count = 0;
// 遍历每种硬币面值
for (int coin : coins) {
// 使用尽可能多的当前面值硬币
int numCoins = amount / coin;
amount -= numCoins * coin;
count += numCoins;
// 输出当前面值硬币的数量
if (numCoins > 0) {
System.out.println("使用" + numCoins + "枚" + coin + "面值的硬币");
}
}
System.out.println("最少使用硬币总数: " + count);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 输入金额
System.out.print("请输入需要找零的金额: ");
int amount = scanner.nextInt();
findMinCoins(amount);
scanner.close();
}
}
scanf
来获取用户输入,printf
来输出结果。input()
获取数据,并使用整数除法//
进行操作。Scanner
类来处理用户输入,并在循环中通过除法和取余操作来实现贪心策略。每个实现都遵循了相同的贪心策略,即每次选择最大的面值硬币进行换算,直到总金额为零。
本站将定期更新分享一些python机器学习的精选代码