欧拉计划 第三十一题

In England the currency is made up of pound, £, and pence, p, and there are eight coins in general circulation:

1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) and £2 (200p).

It is possible to make £2 in the following way:

1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p

How many different ways can £2 be made using any number of coins?

在英格兰货币由英镑和便士组成,一般流通中有八个硬币:

1p,2p,5p,10p,20p,50p,£1(100p)和£2(200p)。

可以通过以下方式赚取2英镑:

1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p

使用任意数量的硬币可以使用多少种不同的方式?

思路

递归求解:k代表有几种面值的硬币,n代表构成的钱数

边界条件:当只有一种面值的硬币的时候,只能有一种解决方法

当所求值钱数为0时,表示只有一种解决方法

当所求值<0时,不会有解决方法

递归调用函数 f(k - 1, n) + f(k, n - money[k]);

#include <stdio.h>

int money[9] = {0, 1, 2, 5, 10, 20, 50, 100,200};

int f(int k, int n){
	if(k == 1) return 1;
	if(n == 0) return 1;
	if(n < 0) return 0;
	return f(k - 1, n) + f(k, n - money[k]);
}

int main(){
	printf("%d\n",f(8,1000));
	return 0;
}

记忆化

在这道题中由于200并不是一个很大的数字,所以递归调用的次数并不算多,但是如果处理更大数值的话,我们可以看出用时十分长。在这里,我们像14题一样继续用记忆化的方法,记录已经求解过的值。

1.开辟二维数组keep;

2.当数组中有值时,直接返回数组中的值;

3.当数组中没有值时,更新keep数组。

#include <stdio.h>
#define max 1000
#define K 8

int money[9] = {0, 1, 2, 5, 10, 20, 50, 100,200};
int keep[K][max + 5] = {0};

int f(int k, int n){
	int ans = 0;
	if(k == 1) return 1;
	if(n == 0) return 1;
	if(n < 0) return 0;
	if(keep[k][n] && k < K && n < max){
		return keep[k][n];
	}else{
		ans = f(k - 1, n) + f(k, n - money[k]);
	}
	if(k < K && n < max){
		keep[k][n] = ans;
	}
	return ans;
}

int main(){
	printf("%d\n",f(8,200));
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
欧拉伯努利试是一类经典的流体力学目,常用于讨论在流体中的连续性、动量守恒和能量守恒等方面的问。使用MATLAB可以方便地求解这类问。 要解决欧拉伯努利试,我们需要使用流体力学的基本原理,即连续性方程、动量守恒和能量守恒方程。我们可以利用MATLAB编写程序,将这些方程转化为数学模型,并求解相关的物理量。 对于欧拉伯努利试,我们常常需要求解的物理量包括流速、压力和液体高度等。在MATLAB中,我们可以利用流体力学的基本原理建立方程组,并使用数值求解方法计算出相关的物理量。 以一个简单的欧拉伯努利试为例,假设流体在一段管道中流动,已知管道的截面积、液体的初始速度和液体的高度等参数。我们可以利用连续性方程、动量守恒和能量守恒方程,通过MATLAB编写程序求解出管道中的流速、压力和液体的高度等参数。 在MATLAB中,我们可以使用数值求解方法(如Euler法、Runge-Kutta法)对欧拉伯努利试进行数值求解。同时,我们还可以利用MATLAB的可视化功能,将求解结果绘制成图形,更直观地展示出物理量的变化规律。 综上所述,欧拉伯努利试是一个典型的流体力学问,在MATLAB中可以方便地使用数值求解方法求解相关的物理量,并利用可视化功能展示求解结果。通过MATLAB的应用,我们可以更深入地理解流体力学的基本原理,同时也可以更直观地展示和分析物理量的变化情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值