前端编程-版本号比较、完全平方数、口罩问题

比较一组版本号,将其按从小到大的顺序排列。
输入例子:[“2.1.0”, “1.5”, “2”, “1.1.999.1.2.3”, “0.10.0”]
输出例子:[“0.10.0”, “1.1.999.1.2.3”, “1.5”, “2”, “2.1.0”]

void (async function () {
   let str = await readline();
   let arr = JSON.parse(str);  // 将字符串转换为数字
   arr.sort();
   arr = arr.join('", "');
   console.log('["'+arr+'"]'); 
})()

完全平方数

问题描述:给定正整数n,找到若干个平方数使得它们的和等于n。需要让组成的完全平方的个数最少,求使用完全平方数的个数。
解题思路:

  1. 申请一个数组空间,长度为n+1;
  2. 默认设置最差情况,即所有给定值都是由1相加而成;
  3. 寻找可用的 jj作为完全平方数,需要满足条件 i-jj >= 0
  4. 比较与全部使用1作为加数和较小的j时所用数量,取最小值。
    将该赋值给数组空间中对应的i表示组合成i的最优情况;此后再计算较大数组合最优情况时可以直接按使用前面较小数;待遍历结束生成的空间数组从0到给定n使用完全平方数相加的最少数量。
  5. 返回空间数组中n对应值,即为所求完全平方数相加得n的最少数量。
void (async function () {
   let n=await readline();
   var numSquares = function (n){
      const arr = [...Array(n+1)].map((e)=>0);  // 申请一个数组空间长度为n+1
      for(let i=1; i<=n; i++){
         arr[i] = i;
         for(let j=1;i-j*j >= 0;j++){
            arr[i] = Math.min(arr[i], arr[i-j*j] + 1);
         }
      }
      return arr[n];
   }
    console.log(numSquares(n));
})()

口罩问题

问题描述:小明有N元钱去药店买口罩,药店里有6个品牌的口罩,A品牌2个装(2元),B品牌3个装(2元)、C品牌1个装(3元)、D品牌5个装(1元),E品牌4个装(5元),F品牌3个装(2元),由于限购每个品牌最多只能买一个,小明最多能买多少口罩?
输入例子:9
输出例子:13

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

const a = [0, 2, 3, 1, 5, 4, 3]; // 个数
const b = [0, 2, 2, 3, 1, 5, 2]; // 钱

void (async function(){
   let n = parseInt(await readline());
   const dp = Array.from({length:7}, ()=> new Array(n+1).fill(0));  // 创建[7][n+1]的二维数组

   for(let i = 1; i <= 6; i++){
       for (let j = 1; j <= n; j++){
         if(j<b[i]) {
            dp[i][j] = dp[i-1][j]; // 钱不够用了
         } else{
            // 不装第i个,和装了第i个比较
            dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - b[i]] + a[i]);
         }
       }
   }
   console.log(dp[6][n]);
})()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简 。单

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值