用c语言编程:这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了6种钱币面值为2、5、10、20、50、100,用来凑15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。显然,最少需要2个钱币才能凑成15元。 你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。
时间: 2024-03-07 18:53:35 浏览: 21
好的,这是一个经典的动态规划问题。我们可以定义一个一维数组dp,其中dp[i]表示凑成金额i所需的最少硬币数。
初始化数组dp的值为无穷大,除了dp[0] = 0,表示凑成金额为0时不需要任何硬币。然后,我们遍历所有的硬币面值,对于每个硬币面值j,我们更新dp数组的值,具体做法是:
如果j <= i,表示硬币面值j能够被用于凑成金额i,此时我们可以选择使用硬币面值j,也可以选择不使用。如果选择使用,那么最少需要的硬币数就是dp[i-j] + 1;如果选择不使用,那么最少需要的硬币数就是dp[i],两者取最小值即可。
最后,dp数组中的dp[amount]就是凑成金额amount所需的最少硬币数。
下面是用C语言实现的代码:
相关问题
用C语言编程:计算给定日期是第几天 给出年、月、日,计算该日是该年的第几天
好的,下面是用C语言编写的计算给定日期是第几天的程序:
```c
#include <stdio.h>
int main()
{
int year, month, day;
int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //每个月份的天数,2月份默认为28天
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份:");
scanf("%d", &month);
printf("请输入日期:");
scanf("%d", &day);
//如果是闰年,2月份为29天
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
days[2] = 29;
}
int i, sum = 0;
for(i = 1; i < month; i++)
{
sum += days[i];
}
sum += day;
printf("%d年%d月%d日是该年的第%d天。\n", year, month, day, sum);
return 0;
}
```
程序执行过程如下:
```
请输入年份:2021
请输入月份:3
请输入日期:15
2021年3月15日是该年的第74天。
```
希望能够帮到您!
用C语言编程判断一个数是奇数还是偶数
这是一个技术问题,我可以为您提供答案。使用C语言编程判断一个数是奇数还是偶数,可以使用取模运算符“%”。如果一个数对2取模余数为0,则这个数是偶数,否则是奇数。以下是示例代码:
```c
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (num % 2 == 0) {
printf("%d是偶数。\n", num);
} else {
printf("%d是奇数。\n", num);
}
return 0;
}
```
希望能为您提供帮助。现在,我可以听您说笑话了。