Javascript实现硬币面值的组成和排列

问题描述:

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:

11 + 150p + 220p + 15p + 12p + 31p

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

实现:

思路:

1.先解决1分,2分,5分的情况

2.递归的思路解决其他情况

(function(){  

// prepare   

Array.prototype.addRange = function(arr){
if(arr == undefined) { return new Array(); }  

var ret  = new Array();
for(var i = 0 ;i < this.length ;i++){
ret.push(this[i]);
}  

for(var i = 0 ;i < arr.length; i++){
ret.push(arr[i]);
}  

return ret;
}  

Array.prototype.constainsArr = function (arr){
var arr1 = new Array();  

var isContains = true;
for(var i = 0;i < this.length; i++)arr1.push(this[i]);  

var arr2 = new Array();
for(var i = 0;i < arr.length; i++)arr2.push(arr[i]);  

var isContain = true;
for(var i = 0;i < arr1.length ; i++){
isContain = true;  

arr1[i] = arr1[i].sort(function(a,b){return a-b;});
arr2 = arr2.sort(function(a,b){return a-b;});  

for(var j = 0; j< arr1[i].length; j++)
{
if(arr1[i][j]!=arr2[j]) isContain = false;
}  

if(isContain) return true;
}  

return false;
}  

// logic
// 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/script/
var coins = new Array(1, 2, 5, 10, 20, 50, 100 ,200);  

var sln = function solve(n){
if(coins.indexOf(n) == -1) throw ex("unexpected coin");  

if(n== 1 ) return new Array([1]);
if(n == 2) return new Array([1,1],[2]);
if(n == 5) return new Array([1,1,1,1,1],[1,1,1,2],[1,2,2],[5]);  

if(n == 10) {
var arr1 = solve(5);
var combined= new Array();
for(var i = 0 ;i < arr1.length;i++){
for(var j = 0;j < arr1.length;j++){  

var ret = arr1[i].addRange(arr1[j]);  

if(combined.length == 0 || !combined.constainsArr(ret)){ combined.push(ret); }  

}
}  

return combined;
}  

if(n == 20){
var arr1 = solve(10);
console.log("solved 10 ");
console.log(arr1);  

var combined= new Array();
for(var i = 0 ;i < arr1.length;i++){
for(var j = 0;j < arr1.length;j++){  

var ret = arr1[i].addRange(arr1[j]);
if(combined.length == 0 || !combined.constainsArr(ret)){ combined.push(ret); }  

}
}  

return combined;
}  

if(n == 50){
var arr1 = solve(20);
var arr2 = solve(10);  

var combined= new Array();
for(var i = 0 ;i < arr1.length;i++){
for(var j = 0;j < arr1.length;j++){  

var ret = arr1[i].addRange(arr1[j]);
if(combined.length == 0 || !combined.constainsArr(ret)){ combined.push(ret); }  

}
}  

var combined2 = new Array();
for(var i = 0 ;i < arr2.length;i++){
for(var j = 0;j < combined.length;j++){  

var ret = arr2[i].addRange(combined[j]);
if(combined2.length == 0 || !combined2.constainsArr(ret)){ combined2.push(ret); }  

}
}
return combined2;  

}  

if(n== 100){
var arr1 = solve(50);  

var combined= new Array();
for(var i = 0 ;i < arr1.length;i++){
for(var j = 0;j < arr1.length;j++){  

var ret = arr1[i].addRange(arr1[j]);
if(combined.length == 0 || !combined.constainsArr(ret)){ combined.push(ret); }  

}
}  

return combined;
}  

if(n== 200){
var arr1 = solve(100);  

var combined= new Array();
for(var i = 0 ;i < arr1.length;i++){
for(var j = 0;j < arr1.length;j++){  

var ret = arr1[i].addRange(arr1[j]);
if(combined.length == 0 || !combined.constainsArr(ret)){ combined.push(ret); }  

}
}  

return combined;
}  

}  

var ret = sln(50);
for(var i =0;i < ret.length; i++)
console.log(ret[i]);  

})();

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索return
, array
, solve
, var
, length
, arr
, ret
i和i
美元硬币面值对照图、日本硬币面值、美国硬币的面值和图案、美元硬币面值、欧元硬币面值,以便于您获取更多的相关知识。

时间: 2024-08-31 17:56:48

Javascript实现硬币面值的组成和排列的相关文章

JavaScript静态页面值传递之Cookie篇

利用Cookie. Cookie是浏览器存储少量命名数据. 它与某个特定的网页或网站关联在一起. Cookie用来给浏览器提供内存, 以便脚本和服务器程序可以在一个页面中使用另一个页面的输入数据. Post.htm <input type="text" name="txt1"><input type="button" value="Post"><script language="java

JavaScript静态页面值传递之Window.open篇

Window.open篇 这两窗口之间存在着关系.父窗口parent.htm打开子窗口son.htm 子窗口可以通过window.opener指向父窗口.这样可以访问父窗口的对象. Post.htm <input type=text name=maintext><input type=button value="Open">Read.htm<script language="javascript" >//window.open打开

JavaScript静态页面值传递之URL篇

URL篇 能过URL进行传值.把要传递的信息接在URL上. Post.htm <input type="text" name="username"> <input type="text" name="sex"> <input type="button" value="Post"> <script language="javascript

JavaScript静态页面值传递之Cookie

利用Cookie:Cookie是浏览器存储少量命名数据.它与某个特定的网页或网站关联在一起. Cookie用来给浏览器提供内存,以便脚本和服务器程序可以在一个页面中使用另一个页面的输入数据. Post.htm 以下是引用片段: <input type="text" name="txt1"> <input type="button" value="Post"> <script language=&q

JavaScript实现数字数组按照倒序排列的方法_javascript技巧

本文实例讲述了JavaScript实现数字数组按照倒序排列的方法.分享给大家供大家参考.具体如下: 下面的代码演示了JS数组如何通过sort对数字类型的数组进行倒序排序 <!DOCTYPE html> <html> <body> <p id="demo"> Click the button to sort the array. </p> <button onclick="myFunction()"&g

javascript静态页面传值的三种方法分享_javascript技巧

一:JavaScript静态页面值传递之URL篇能过URL进行传值.把要传递的信息接在URL上.Post.htm 复制代码 代码如下: <input type="text" name="username"><input type="text" name="sex"><input type="button" value="Post"><script

js钢琴按钮波浪式图片排列效果代码分享_javascript技巧

本文实例讲述了js钢琴按钮波浪式图片排列效果.分享给大家供大家参考.具体如下: 这是一款基于javascript实现的钢琴按钮波浪式图片排列效果,鼠标在图片列表上移动,当前图片高亮显示,以此为根基点,周围的图片逐渐变小,所以有种手指划过钢琴键盘的感觉. 运行效果图:                                -------------------查看效果------------------- 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式. 注意:图片的alt属性不能

1个掷硬币问题,4个Python解法:读书笔记

首发于知乎,再发到阿里社区看看人气如何 关键词:统计,概率,机器学习,Pandas, Numpy, sympy scipy 预计阅读时间-10分钟 我在学习机器学习算法和玩Kaggle 比赛时候,不断地发现需要重新回顾概率.统计.矩阵.微积分等知识.如果按照机器学习的标准衡量自我水平,这些知识都需要重新梳理一遍. 网上或许有各种各样知识片断,却较难找到一本书将概率,统计.矩阵.微积分公式和Python结合起来. 要么是讲的比较浅显,要么跨度比较大. 最近看到一本书,恰好把上面的问题解决了.着重讲

最少硬币问题(受限)NK1132

1132: 最少硬币问题 Time Limit: 1500 ms    Memory Limit: 10000 kB   Total Submit : 909 (187 users)   Accepted Submit : 241 (132 users)   Page View : 9030  Font Style: Aa Aa Aa 设有n 种不同面值的硬币,各硬币的面值存于数组T[1:n]中.现要用这些面值的硬币来找钱.可以使用的各种面值的硬币个数存于数组Coins[1:n]中.对任意钱数0