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

JS (node) 的 ACM 模式 + debug方法 (01背包为例)

文章目录

  • JS 的 ACM 模式
    • 输入处理
  • JS dubug (01背包为例)
    • 动态输入
      • 在本地通过 Node.js 运行和调试
    • 硬编码 Hard Coding
      • VS Code

JS 的 ACM 模式

在 JavaScript 中,ACM 模式一般通过 Node.js 的 readline 模块实现。

输入处理

使用 readline 模块监听输入。
将每行输入存入数组中。
当输入结束( close 事件触发)时,解析数据并处理问题。

const readline = require('readline');

// 创建输入接口
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

let input = []; // 用于存储所有输入数据

// 每行输入都会触发 'line' 事件
rl.on('line', (line) => {
    input.push(line); // 存储每行输入
});

// 输入结束后触发 'close' 事件
rl.on('close', () => {
    // 数据处理逻辑放在这里
    console.log(input); // 示例:输出输入的所有行
});

JS dubug (01背包为例)

  • 这是一段01背包的JS代码
const readline = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];

readline.on('line', (line) => {
    input.push(line);
});

readline.on('close', () => {
    let [n, bagweight] = input[0].split(' ').map(Number);
    let weight = input[1].split(' ').map(Number);
    let value = input[2].split(' ').map(Number);

    let dp = Array.from({ length: n }, () => Array(bagweight + 1).fill(0));

    for (let j = weight[0]; j <= bagweight; j++) {
        dp[0][j] = value[0];
    }

    for (let i = 1; i < n; i++) {
        for (let j = 0; j <= bagweight; j++) {
            if (j < weight[i]) {
                dp[i][j] = dp[i - 1][j];
            } else {
                dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
            }
        }
    }

    console.log(dp[n - 1][bagweight]);
});

在浏览器中无法直接运行这段代码,因为它使用了 Node.js 的 readline 模块,这是服务器端的功能,而不是浏览器环境中的 API。

动态输入

定义:数据来自代码外部,例如用户输入、文件、数据库、API 请求等。

在本地通过 Node.js 运行和调试

代码文件保存为 单个 js

在终端运行 node solution.js (确保电脑里有node,通过node -v确认)

然后在终端中手动输入测试数据,例如:

3 4
2 1 3
4 2 3

Ctrl+D 表示输入结束,代码将执行并输出结果:(注意代码中输出了6为结果)
在这里插入图片描述

可以通过在代码中插入console.log语句,打印中间变量的值,检查程序的执行逻辑

硬编码 Hard Coding

定义:将固定的值直接写入代码中,不能在运行时动态改变。

VS Code

VS Code 的调试环境不支持动态交互的标准输入

因此

将:

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

let input = [];
rl.on('line', (line) => {
    input.push(line);
});

rl.on('close', () => {
    console.log("用户输入:", input);
});

替换为:

let input = [
    "3 4",          // 模拟第一行输入
    "2 1 3",        // 模拟第二行输入
    "4 2 3"         // 模拟第三行输入
];

(() => {
    console.log("模拟输入:", input);
})();

  • 01背包代码变为:
// 替代 readline 输入
let input = [
    "3 4",          // 第一行:n 和 bagweight
    "2 1 3",        // 第二行:weight 数组
    "4 2 3",        // 第三行:value 数组
];

// 模拟 readline 的 close 逻辑
(() => {
    let [n, bagweight] = input[0].split(' ').map(Number);
    let weight = input[1].split(' ').map(Number);
    let value = input[2].split(' ').map(Number);

    // 调试输出
    console.log('输入的重量数组:', weight);
    console.log('输入的价值数组:', value);

    let dp = Array.from({ length: n }, () => Array(bagweight + 1).fill(0));

    for (let j = weight[0]; j <= bagweight; j++) {
        dp[0][j] = value[0];
    }

    for (let i = 1; i < n; i++) {
        for (let j = 0; j <= bagweight; j++) {
            if (j < weight[i]) {
                dp[i][j] = dp[i - 1][j];
            } else {
                dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
            }
        }
    }

    console.log('动态规划结果:', dp);
    console.log('最大价值:', dp[n - 1][bagweight]);
})();

在vscode中打开这一段代码,CTRL + ~打开终端。
选择 JavaScript Debug Terminal 模式

在这里插入图片描述
切换到这个js文件在的绝对路径根目录
在这里插入图片描述
在这里插入图片描述
选择一个debug 点
在这里插入图片描述

node sol.js 运行
在这里插入图片描述
选择上面的按钮进行 debug
在这里插入图片描述

还有很多其他用法,不一一列举了。


http://www.kler.cn/a/467557.html

相关文章:

  • Linux中rsync命令使用
  • 基于GAN和RL的思想来训练对话生成
  • AWS Auto Scaling基础知识
  • winform中使用panuon开源UI库的问题
  • 基于Centos 7系统的安全加固方案
  • Unity性能优化总结
  • Centos7无法使用 yum命令 报错 Cannot find a valid baseurl for repo: base/7/x86_64
  • halcon三维点云数据处理(六)find_box_3d
  • 无刷直流电机(BLDC)六步换向法
  • ARM 汇编基础总结
  • 语义搜索、语义数据搜索
  • 折叠手机市场出现崩塌迹象,三星做了努力,将推低价折叠手机
  • GO语言学习(一:背景与代码初始)
  • Nginx:SSL/TLS 配置
  • HTML5 动画效果:淡入淡出(Fade In/Out)详解
  • AI 热潮背后的沉重:解读 DeepMind 天才科学家 Felix Hill 的心声
  • WebGL 实践(一)开发环境搭建
  • Json与jsoncpp
  • 使用 Jupyter Notebook:安装与应用指南
  • 深度学习中的步数指的是什么
  • 【含开题报告+文档+PPT+源码】基于SpringBoot的线上动物园售票系统设计
  • Python 基于 opencv 的人脸识别监控打卡系统(源码+部署)
  • RocketMQ消费者如何消费消息以及ack
  • 继承(3)
  • Xilinx Vivado环境下载bit后自动触发ILA采集
  • TradingView功能