有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n <= 100000),有多少中组合可以组成n分钱?
1、暴力破解法
使用四个for循环,但是如果n很大的话,就会超时
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] array = new int[]{1,2,5,10};System.out.println(myCount(n, array));}public static int myCount(int n,int[] array){int count=0;for (int i = 0; i <= n; i++) {for (int j = 0; j <= n; j++) {for (int k = 0; k <= n; k++) {for (int l = 0; l <= n; l++) {if (array[0]*l+ array[1]*k+array[2]*j+array[3]*i== n) {count++;}}}}}return count;}
}
2、递归法,如果n很大的话,就会超时
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] array = new int[]{1,2,5,10};System.out.println(myCount(n, 3));}private static int myCount(int n, int k) {int[] array = new int[]{1,2,5,10};if(n<0){return 0;}if(n == 0){return 1;}int count = 0;for (int i = 0; k>=0 && i*array[k]<=n; i++) {count +=myCount(n-i*array[k],k-1);}return count;}
}
3、运行速度很快,解题的不二之选
import java.util.Scanner;
public class Main {public static void main(String args[]) {Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();int coins[]= {1,2,5,10};int [] array=new int[100001];//这里定义一个100001大小的数组,用来存放组成0-100000的方法数array[0]=1;for(int i=0;i<4;i++) {for(int j=coins[i];j<=n;j++) {array[j]=(array[j]+array[j-coins[i]])%1000000007;/*第一次循环,i=0,coins[i]=1;这里面求的是,只使用1组成0-100000的方法数第二次循环,这里面求的是,只使用1,2组成0-100000的方法数第三次循环,这里面求的是,只使用1,2,5组成0-100000的方法数第四次循环,这里面求的是,只使用1,2,5,10组成0-100000的方法数*/}}System.out.println(array[n]);}
}
最上面的两种方法,相对比较简单,就不解释了,下面我来重点讲解一下第三种方法!!!
首先呢,我们来看一个表格,解释一下,第一行表示的是想要的钱数,第一列表示组成钱数所使用的的硬币的种类
图片太小,放大了看,没看懂的话,欢迎评论询问
有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n <= 100000),有多少中组合可以组成n分钱?相关推荐
- 创新工场笔试题----有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱,求有多少种组合可以组合成n分钱?
[题目]有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱,求有多少种组合可以组合成n分钱? 代码如下 void Combination(int *a,int index,int n,v ...
- 有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱,求有多少种组合可以组合成n分钱?
使用回溯法 int countQ = 0; int Target = 0;int coin[4] = {1,2,5,10}; int total=0; vector<int> soluti ...
- 10-278 查询所授每门课程平均成绩均在70分以上的教师(MSSQL) (10 分)
查询所授每门课程的平均成绩均在70分以上( 含70分)的教师. 提示:MSSQLServer 评测SQL语句. 表结构: 请在这里写定义表结构的SQL语句.例如: -- 课程表 CREATE TABL ...
- 用一元五角兑换5分、2分、1分的硬币(每种都要有)共100枚,共一共有多少种方案?
#include<stdio.h> int main() {int i,j,k;int count=0;for(i=1;i<30;i++){for(j=1;j<75;j++){ ...
- 10个台阶,每次只能上1个或者2个,一共有多少种走法
思路来得太慢,好想拿小锤锤捶自己哟~~~ 第一种,递归思路. 如果你上10个台阶,可以分解成下面两种情况: ● 上9个台阶,最后上1个台阶.假设这种情况下,上前面9个台阶的方法数为m. ● 上8个台阶 ...
- 6-1 jmu-python-组合数据类型-1.计算坐标点欧氏距离 (10 分)
文章目录 **6-1 jmu-python-组合数据类型-1.计算坐标点欧氏距离 (10 分)** **6-2 jmu-python-函数-找钱 (10 分)** **6-3 jmu-java& ...
- 直通车上10分 易如反掌
这个上10分计划 我就没有去管它 一开始设置好就可以 关于直通车上10分我开得还是比较多的 所以轻车熟路 开始设置好就没有去管他 地域省份我直接全开 不是那种通过控制展现来上分 控制展现短时间内是可以 ...
- 7-1 有重复元素的全排列 (10 分)
7-1 有重复元素的全排列 (10 分) 计算给定的n个数有多少种排列方式,即求全排列(可能出现重复的元素) 输入格式: 第一行输入数字的数量n(n>2),第二行给出每一个数字. 输出格式: 一 ...
- 7-7 有重复元素的全排列 (10 分)(set容器做法思路加详解)
一:题目 计算给定的n个数有多少种排列方式,即求全排列(可能出现重复的元素) 输入格式: 第一行输入数字的数量n(n>2),第二行给出每一个数字. 输出格式: 一个数字,不同排列方式的数量. 输 ...
- 中考计算机加试及格多少分,中考满分多少,各科多少分
中考满分多少,各科多少分2020-07-20 14:01:36文/董玉莹 2020年全国中考已经结束了大半,本文整理了各省市中考总分,欢迎阅读. 北京中考总分 中考文化课总分为540分. 语文试卷总分 ...
最新文章
- rocksdb报错解决:librocksdb.a(format.o): In function `Zlib_Uncompress':
- css设置元素继承父元素宽度_前端新手必知-5种新型的CSS长度单位
- 根据鼠标点击位置获取DataGridView的选择行号。
- 少年郎,你需要封装好的ViewPager工具类
- 超级计算机性能调查,调查:多数超级计算机使用Linux操作系统
- hdu1521(指数母函数)
- php 关闭oracle,CSS_ORACLE启动和关闭实例,实例启动和关闭:一.数 - phpStudy
- .net 怎么使用github_如何正确的使用ncnn的Extractor
- php curl 采集文件,curl获取远程文件内容
- ajaxfileupload 返回值_ajaxFileUpload上传文件返回json无法解析
- UIDeviceOrientation 和 UIInterfaceOrientation 设备旋转的用法 (实例)
- 解决mac管理员变成普通成员
- Golang 入门系列(十一)Go语言实现webapi
- 二十个方法鼓励自己最有效
- 淘宝质量属性场景分析
- 使用telnet登录varnish3.x管理缓存时认证问题
- 十分钟走进大数据世界
- 华为开通api服务_入冬第一场技术盛宴!DevRun开发者沙龙华为云武汉专场举办
- 3D屏保:魔方2.0版本
- UnitedPlugins发布终极Bass效果器:QuickBass