编程题 - 汽水瓶【JavaScript/Node.js解法】

目录

题目描述

解题思路

代码实现

复杂度分析

代码解释

输入输出处理


题目描述

有这样一道经典的编程题:某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有 n 个空汽水瓶,他最多可以换多少瓶汽水喝?

解题思路

这是一个模拟兑换过程的问题。解题的核心在于不断模拟用空瓶换汽水的操作,直到剩余的空瓶数量不足以再进行兑换为止。具体步骤如下:

  1. 初始化一个变量 totalDrank 用于记录总共喝到的汽水数量,初始值为 0。
  2. 进入一个循环,只要当前的空瓶数量 n 大于等于 2,就继续进行兑换操作:
    • 当 n 等于 2 时,虽然不能直接换一瓶汽水,但可以向老板借一个空瓶,换一瓶汽水喝完后把空瓶还给老板,所以这种情况下可以多喝一瓶汽水。
    • 当 n 大于等于 3 时,计算可以换得的汽水数量 newDrankn 除以 3 的商),并将其累加到 totalDrank 中。
    • 更新剩余的空瓶数量 n,即 n 减去换汽水用掉的空瓶数量(newDrank * 3),再加上新换来的汽水喝完后的空瓶数量(newDrank)。
  3. 循环结束后,返回 totalDrank

代码实现

function maxSodas(n) {let totalDrank = 0;while (n >= 2) {if (n === 2) {totalDrank++;break;}let newDrank = Math.floor(n / 3);totalDrank += newDrank;n = n - newDrank * 3 + newDrank;}return totalDrank;
}// 示例测试
console.log(maxSodas(3)); // 输出: 1
console.log(maxSodas(7)); // 输出: 3

复杂度分析

  • 时间复杂度:由于每次循环都会减少空瓶的数量,直到空瓶数量小于 2 时停止循环,所以循环的次数是有限的,时间复杂度为 O(logn)。
  • 空间复杂度:只使用了常数级的额外变量(totalDrank 和 newDrank),因此空间复杂度为 O(1)。

代码解释

  • maxSodas 函数接受一个参数 n,表示初始的空瓶数量。
  • 在 while 循环中,首先判断 n 是否等于 2,如果是,则 totalDrank 加 1 并跳出循环。
  • 否则,计算可以换得的汽水数量 newDrank,并将其累加到 totalDrank 中。
  • 然后更新 n 的值,继续下一次循环,直到 n 小于 2 为止。
  • 最后返回 totalDrank,即总共喝到的汽水数量。

输入输出处理

如果要处理多个输入,可以使用 readline 模块从标准输入读取数据,示例代码如下:

const readline = require('readline');const rl = readline.createInterface({input: process.stdin,output: process.stdout
});rl.on('line', (line) => {const n = parseInt(line);if (n === 0) {rl.close();} else {console.log(maxSodas(n));}
});

这段代码使用 readline 模块监听标准输入的每一行数据,将输入的字符串转换为整数 n。如果 n 为 0,则关闭输入流;否则,调用 maxSodas 函数计算可以喝到的汽水数量并输出结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习神经网络分类原理

每一个神经元做的是一个类似回归的操作 最后一层是softmax函数,每一个输出就会变成一个0到1之间的数,也就是概率,然后他们之间的和加起来等于1,到底是哪一个分类就是看哪个神经元的这个值最大。 那么如何算损失呢: 加…

硬核技术组合!用 DeepSeek R1、Ollama、Docker、RAGFlow 打造专属本地知识库

文章目录 一、引言二、安装Ollama部署DeepSeekR1三、安装Docker四、安装使用RAGFlow4.1 系统架构4.2 部署流程4.3 使用RAGFlow4.4 在RAGFlow中新增模型4.5 创建知识库4.6 创建私人助理使用RGA 一、引言 本地部署DeepSeek R1 Ollama RAGFlow构建个人知识库,通过将…

前端实现OSS上传图片(Vue3+vant)

首先,下面这些信息从阿里云服务器OSS管理中获取 aliyun:oss:file:endpoint: "oss-cn-beijing.aliyuncs.com"keyid: "xxxxxxxxx"keysecret: "xxxxxxxxxxxx"bucketname: "xxxx"一、安装OSS npm install ali-oss 二、以下步…

huggingface NLP主要知识点以及超级详解使用

1.安装huggingface依赖库 pip install transformers pip install datasets pip install pytorch pip install tokenizers pip install diffusers pip install accelerate pip install evaluate pip install optimum pip install pillow pip install requests pip install gr…

Spark核心之02:常用算子详解

1、RDD操作详解 # 启动spark-shell spark-shell --master local[2] 1.1 基本转换 1) map map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。 任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。 举例: scala> val a sc.parallelize(1 …

MySQL 8.X 报错处理

1.重新加载配置 reload the configuration mysql> ALTER INSTANCE RELOAD KEYRING; ERROR 1227 (42000): Access denied; you need (at least one of) the ENCRYPTION_KEY_ADMIN privilege(s) for this operation 提示需要ENCRYPTION_KEY_ADMIN权限 重新授权 GRANT ENCR…

SQL注入练习场:PHPStudy+SQLI-LABS靶场搭建教程(零基础友好版)

注意:文中涉及演示均为模拟测试,切勿用于真实环境,任何未授权测试都是违法行为! 一、环境准备 下载PHPStudy 官网下载地址:https://www.xp.cn/php-study(选择Windows版) 安装时建议选择自定…

现今大语言模型性能(准确率)比较

现今大语言模型性能(准确率)比较 表头信息:表的标题为“大语言模型性能比较结果”(英文:Table 1: Large Language Model Performance Comparison Results),表明该表是用于对比不同大语言模型的性能。列信息: 模型:列出参与比较的不同大语言模型名称,包括LLAMA3(70B)…

Docker创建自定义网桥并指定网段

前言 docker0是Docker默认网络的核心组件, 通过虚拟网桥和NAT技术, 实现了容器间的通信以及容器与外部网络的交互。然而, docker0网段是固定的(通常是172.17.0.0/16), 为了更灵活地管理容器网络,Docker支持创建自定义网桥,允许用户指定网段。 例如, 在…

【向量数据库Weaviate】 和Elasticsearch的区别

Weaviate 和 Elasticsearch 是两种不同类型的数据库,设计目标和应用场景有显著差异。以下是它们的核心区别和适用场景的详细对比: 1. 设计目标与核心能力 维度WeaviateElasticsearch核心能力向量数据库 图数据库(语义搜索优先)全…

蓝桥杯每日一题:第一周周四哞叫时间

蓝桥杯每日一题:第一周周四哞叫时间 疑惑:如何把复杂度控制在Q(n),怎么枚举a和b,longlong的形式又该怎么输入(考虑用string) 思路:枚举倒数第二个b前面有多少个a 这是一…

在 macOS 使用 .pem 私钥免密登录腾讯云服务器

前言 在腾讯云上创建服务器时,如果选择了「密钥对」的登录方式,就会得到一个 .pem 文件作为私钥。很多小伙伴在使用 macOS 系统时,可能不清楚如何使用这个私钥文件来 SSH 免密登录远程服务器。本文将详细介绍如何在本地配置 .pem 私钥文件并…

AI学习笔记:LM studio大模型加载参数说明

LM Studio加载大模型时参数设置页面的常见参数及设置方法如下: 上下文长度(Context Length) 意义:表示模型可以处理的最大上下文长度,即模型一次能够考虑的输入文本的最大token数量。较大的上下文长度能让模型更好地…

Spring项目中常用操作记录

List 基础操作 创建 // 使用 ArrayList&#xff08;基于动态数组&#xff0c;适合随机访问&#xff09; List<String> arrayList new ArrayList<>();// 使用 LinkedList&#xff08;基于链表&#xff0c;适合频繁插入/删除&#xff09; List<Integer> li…

腾讯 TDF 即将开源 Kuikly 跨端框架,Kotlin 支持全平台

今天&#xff0c;在腾讯的 Shiply 平台看 Flutter 动态化自研框架 Conch 时&#xff0c;在侧边栏看到了有「跨端开发框架」的介绍&#xff0c;点开发现有两个产品&#xff1a; Hippy&#xff1a;面向前端技术栈的跨端开发框架&#xff0c;Web原生开发体验&#xff0c;支持 Rea…

SQL AND OR 操作符详解

SQL AND & OR 操作符详解 在SQL(结构化查询语言)中,AND 和 OR 是两种非常重要的逻辑操作符,它们用于在查询条件中组合多个条件。理解并正确使用这些操作符对于编写有效的SQL查询至关重要。 引言 在处理数据库查询时,我们常常需要根据多个条件来筛选数据。AND 和 OR…

nginx accesslog 打印自定义header

比如我在请求的header中添加了一个path-match-type&#xff0c;那我现在nginx的accesslog 中打印出来&#xff0c;应该如何配置呢&#xff1f; rootnginx-59f5d66df6-jw5k8:/# cat /etc/nginx/nginx.conf user nginx; worker_processes auto;error_log /var/log/nginx/erro…

响应式布局的设计规范

响应式设计&#xff08;Responsive Design&#xff09; 是一种 web 设计技术&#xff0c;旨在使网页在不同的设备和屏幕尺寸上都有良好的显示效果。响应式设计的核心思想是网页的布局能够根据设备的屏幕宽度、分辨率以及其他特性自动调整&#xff0c;使其适应桌面、平板和手机等…

说一下redis事务底层原理

Redis事务 1. 事务的基本流程 Redis 事务通过 MULTI、EXEC、WATCH 等命令实现&#xff0c;底层原理可以分为以下几个步骤&#xff1a; (1) MULTI 命令 当客户端发送 MULTI 命令时&#xff0c;Redis 会将客户端标记为“事务模式”。在事务模式下&#xff0c;客户端发送的所有…

【我的Android进阶之旅】如何使用NanoHttpd在Android端快速部署一个HTTP服务器?

文章目录 开篇:程序员的"摸鱼神器"?一、为什么选择NanoHttpd?二、五分钟极速上车指南2.1 ▶ 第一步:引入依赖的哲学2.2 ▶ 第二步:创建服务器类:继承大法好2.3 ▶ 第三步:启动服务的仪式感三、高级玩法:让服务器不再单调3.1 🔥 场景1:变身文件服务器3.2 �…