nodejs案例

  1. 设计一个简单的红绿灯策略,比如红灯亮分别为console.log(“red”),要求按照红3s-黄1s-绿1s顺序不断循环展示
let time =  new Date()
function button(color,time){
    let p= new Promise(function(resolve,reject){
setTimeout( ()=> {
            resolve("Timestamp:"+time+",Color:"+color)
                    },time)
    })
    return p
}

 function flash() {
    button("red",3000)
        .then((v)=>{
            console.log(v);
            return button("yellow",3000)
        }).then((v)=>{
            console.log(v);
            return button("green",1000)
        }).then((v)=>{
            console.log(v)
            return flash()  //或去掉此行,最后的调用改为setInterval(flash, 7000)
        })
}
flash()

2.1 给定一个整数金额的整钱n,还有2,3,5元三种货币,计算出所有能凑出整钱的组合个数

function countMoney(total) {
    if (total < 2) {
        return 0;
    }
    let result = 0;
    let maxAmount = total / 2;
    for (let i = 0; i <= maxAmount; i++) {
        for (let j = 0; j <= maxAmount; j++) {
            for (let k = 0; k <= maxAmount; k++) {
                let sum = i * 5 + j * 3 + k * 2;
                if (sum === total) {
                    result++;
                    break;
                } else if (sum > total) {
                    break;
                }
            }
        }
    }
    return result;
}
console.log(countMoney(10));

2.2 假如这个能使用的货币列表是给定的,意思是输入一个整数list,比如[1,2,3,5],还有金额n,求出所有组合数

整体思路用递归,function countMoney(amount, moneyArr),amount为剩下的金额,moneyArr为可以选择的货币列表,返回的是产生的组合数,那么初始条件认为amount = n, moneyArr = list(排序,由高往低)。取出当前moneyArr(也就是当前最大的面值)的货币first,剩下的货币可选面额叫做smallerMoneyArr,然后从0到first最大能取的个数开始(即 0 ~ amount / first),不断递归调用countMoney(remainingAmount, smallerMoneyArr),加起来所有组合数即可。
终止条件:如果剩余余额不为0但可选货币为空,那么分割方法失败,返回0;如果余额是0,那么分割成功,返回1

let inputMoneyArray=[1,2,3,5]
inputMoneyArray.sort().reverse()
function countMoney(amount,moneyArr) {
    if (amount!=0 && moneyArr.length==0){
        return 0
    } else if (amount==0){
        return 1
    }
    let first = moneyArr[0]
    let smallerMoneyArr=[]
    for (let i = 1; i < moneyArr.length; i++) {
        smallerMoneyArr[i-1]=moneyArr[i]
            }
            let sum=0
    for (let i=0;i<=amount/first;i++){
        let remainingAmount=amount-(first*i)
        sum+=countMoney(remainingAmount,smallerMoneyArr)
    }return sum
}
let result=countMoney(5,inputMoneyArray)
console.log(result)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容