编写一个函数用于实现金额组合:面额分别有1元、2元、5元的纸币共计N张,现需要付出M元,统计共有几种付法。N、M是用户输入的值。(有10张纸币,面额分别是1元、2元、5元,现需要付出18元,通过编程统计出共有几种付法。)
思考:JS中for循环嵌套有什么特点?
参考代码:
方案1:
/* 设1元a张,2元b张,5元c张
*/
function f(N, M) {
var arr = [];
for (var a = 0; a <= N; a++) {
for (var b = 0; b <= N; b++) {
for (var c = 0; c <= N; c++) {
if (a + 2 * b + 5 * c == M && a + b + c == N) {
arr.push(a + ',' + b + ',' + c);
};
}
}
}
if (arr.length == 0) {
console.log("无解");
} else {
console.log(arr);
}
}
f(10, 23);//=>["2,8,0", "5,4,1", "8,0,2"]
方案2
/* 转换为数学问题
设1元a张,2元b张,5元c张,列出方程组
a+b+c=N
a+2b+5c=M
获得关系式
b+4c=M-N
0≤N - b - c
(M-N)为常数,因此问题本质是用JS解决一个一元一次直线方程在限定范围内的非负整数解,类似线性规划的非负整数解。
*/
function f1(N, M) {
var arr = [];
for (var b = 0; b <= M - N; b++) {
for (var c = 0; c <= M - N; c++) {
var a = N - b - c;
if (b + 4 * c == M - N) {
if (a >= 0) {
arr.push(a + ',' + b + "," + c);
}
}
}
}
if (arr.length !== 0) {
console.log(arr);
} else {
console.log("无解");
}
}
f1(10, 18); //=>["8,0,2", "5,4,1", "2,8,0"]
最后
以上就是害羞黄蜂最近收集整理的关于JavaScript中for循环嵌套编程小案例的全部内容,更多相关JavaScript中for循环嵌套编程小案例内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复