当前位置: 首页 > news >正文

硬币面值的组成多少种可能---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:

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?


实现:

思路:

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 

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]);

})();


相关文章:

  • Project Ruler 算法练习之除数问题
  • 编译Android cupcake 核心
  • Project Ruler 算法练习之 10 进制 转 2进制 以及数字对称
  • 二次捆绑,刻不容缓
  • Project Ruler 算法练习之 Truncate Prime
  • 邮件群发当中显示隐藏其他收件人
  • TFS Preview 删除项目命令
  • 探秘新体验 Windows 7各项功能试用
  • Windows 7 RC版改进36个功能
  • Windows 7 7048/Beta、Vista、XP性能对比
  • 兼容Windows7的多点触摸显示器即将面世
  • 如何加速Windows 7的任务栏窗口预览
  • 8皇后问题--回溯法 (循环递归)
  • Windows 7:在Homegroup中链接在线ID并共享文件
  • 解方程 (允许误差)
  • 10个确保微服务与容器安全的最佳实践
  • canvas 高仿 Apple Watch 表盘
  • CSS实用技巧
  • EOS是什么
  • git 常用命令
  • JavaScript HTML DOM
  • MobX
  • Sass 快速入门教程
  • vagrant 添加本地 box 安装 laravel homestead
  • Vue.js 移动端适配之 vw 解决方案
  • Vue--数据传输
  • 阿里云Kubernetes容器服务上体验Knative
  • 产品三维模型在线预览
  • 工作中总结前端开发流程--vue项目
  • 基于axios的vue插件,让http请求更简单
  • 记一次用 NodeJs 实现模拟登录的思路
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • # Apache SeaTunnel 究竟是什么?
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #NOIP 2014#Day.2 T3 解方程
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (31)对象的克隆
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (排序详解之 堆排序)
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core 6 集成和使用 mongodb
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Framework .NET Core与 .NET 的区别
  • .net 受管制代码
  • .NET 药厂业务系统 CPU爆高分析
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET的数据绑定