每日练习之数学——砝码和天平

news2024/11/20 3:20:27

砝码和天平

题目描述

运行代码

#include<iostream>
using namespace std;
int main()
{
	int w,m,T;
   cin>>T;
    while(T--)
    {
       cin>>w>>m;
        while(m)
        {
            if((m-1)%w==0)m=(m-1)/w;
            else if((m+1)%w==0)m=(m+1)/w;
            else if(m%w==0)m/=w;
            else break;
        }
        if(!m)
            cout<<"YES"<<endl;
        else 
            cout<<"NO"<<endl;
    }
}

代码思路

通过模拟天平的称量过程来检查是否能够使用给定的砝码(其质量为w的幂次)来表示一个特定的质量m。不是直接根据题目的数学思路来解决问题的,它实际上是在尝试模拟一个通过增加或减少少量质量来尝试使质量m能被w整除的过程。

  1. 首先读取测试数据的组数T。
  2. 对于每一组数据,读取w和m的值。
  3. 使用一个while循环尝试将m“调整”到一个可以被w整除的值。这里尝试了三种操作:
    • 如果m-1可以被w整除,则将m设置为(m-1)/w
    • 如果m+1可以被w整除,则将m设置为(m+1)/w
    • 如果m本身可以被w整除,则将m除以w。
  4. 如果在循环结束后m变为0,那么输出"YES",表示可以通过这些砝码来表示质量m(尽管这不是直接通过砝码组合,而是通过上述的“调整”过程)。
  5. 如果循环结束后m不为0,那么输出"NO",表示无法通过这些砝码来表示质量m。

改进思路

问题
  • 它没有直接利用到砝码是w的幂次这一特性。实际上,我们可以直接使用二进制表示法来判断m是否可以通过这些砝码来表示,而不需要这种“调整”过程。
  • 它假设了通过增加或减少1个单位的质量可以使得m变得可以被w整除,这在实际情况下并不总是正确的。
  • 即便m在某个点变得可以被w整除,这并不意味着它可以通过砝码组合来表示。因为代码没有检查这个整除后的m是否仍然在1到w的n次方减1的范围内。
改进

判断质量m是否可以用w的幂次砝码来表示,即判断m是否小于w(n+1)次方(其中n是砝码的最大幂次,但在这个问题中我们不需要确切知道n,只需要知道w(n+1)次方大于m即可)。

由于w可能非常大,直接计算w(n+1)次方可能会导致整数溢出。但幸运的是,我们只需要检查m是否小于w的平方,因为任何大于wm都可以通过w的更高次幂来表示(假设有足够的砝码)。

要判断一个质量m是否能用w的幂次砝码来表示,我们需要确保m可以表示为w的幂次的和,这相当于检查m的二进制表示是否只包含1(即mw的幂次的组合)。但是,由于我们不知道具体的n(砝码的最大幂次),我们可以简单地检查m是否小于或等于w的某个足够大的幂次,比如w的32次方(因为int类型通常有32位)。

然而,更简单的方法是检查m是否小于w(n+1)次方,其中n是使得w^(n+1)大于m的最小整数。由于w非常大,我们不能直接计算w^(n+1),但我们可以知道,如果m小于w的平方,那么它肯定可以用w的幂次来表示(因为w^0w^n的砝码可以覆盖从1到w^(n+1) - 1的所有整数)。

这个题目目前还没想到切实可行通过全部示例数据的数学方法解答的代码

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

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

相关文章

「职场必备」让你摆脱思维混乱的7个工具

1. 升维思考&#xff0c;降维拆解 解决复杂问题时&#xff0c;有两个关键的阶段&#xff0c;能让我们事半功倍。 第一个阶段是思考阶段&#xff0c;要自下而上进行“升维思考”&#xff0c;明确问题的本质是什么。第二阶段是行动阶段&#xff0c;要自上而下进行“降维拆解”&am…

Excel查找匹配函数(VLOOKUP):功能与应用解析

文章目录 概述VLOOKUP函数语法查询并返回单列结果查找并返回多列结果MATCH函数VLOOKUPMATCH 从右向左逆向查找&#xff1a;INDEX函数INDEXMATCH 函数匹配方式查找匹配注意事项函数名称错误: #NAME?值错误&#xff1a;#VALUE!引用错误&#xff1a;#REF!找不到数据&#xff1a;#…

1、NLP分词

分词处理 1、token&#xff08;词汇单元&#xff09;2、Tokenizer&#xff08;分词&#xff09;3、ElasticSearch 分词器&#xff08;Analyzer&#xff09;4、分词工具停用词&#xff08;Stop words&#xff09; 1、token&#xff08;词汇单元&#xff09; “token”主要用于文…

AI早班车5.25

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

51-53 DriveWorld:通过自动驾驶世界模型进行 4D 预训练场景理解 (含模型数据流梳理)

24年5月&#xff0c;北京大学、国防创新研究院无人系统技术研究中心、中国电信人工智能研究院联合发布了DriveWorld: 4D Pre-trained Scene Understanding via World Models for Autonomous Driving。 DriveWorld在UniAD的基础上又有所成长&#xff0c;提升了自动驾驶目标检测…

linux之防火墙工具

netfilter Linux防火墙是由Netfilter组件提供的&#xff0c;Netfilter工作在内核空间&#xff0c;集成在linux内核中。 Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING)&#xff0c;而这五个hook function向用户…

人工智能应用-实验8-用生成对抗网络生成数字图像

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;代码&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;分析结果&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;实验总结&#x1f9e1;&#x1f9e1; &#x1f9…

Stable Diffusion【艺术特效】【霓虹灯】:霓虹灯像素化马赛克特效

提示词 Neon pixelated mosaic of [Subject Description],highly detailed [主题]的霓虹灯像素化马赛克&#xff0c;高度详细 参数设置 大模型&#xff1a;万享XL_超写实摄影V8.2 采样器&#xff1a;Euler a 采样迭代步数&#xff1a;25 CFG&#xff1a;3 反向提示词&#x…

Docker Desktop安装和如何在WSL2中使用Docker

最近在使用WSL的过程中&#xff0c;想使用docker遇到了一些问题&#xff0c;在WSL中安装Linux版本的docker&#xff0c;启动镜像之后不能从Windows机器的端口映射出来&#xff0c;查了一圈之后&#xff0c;发现应该使用Docker Desktop软件&#xff0c;下面是安装和使用的方式 …

UE5 双手握剑的实现(逆向运动学IK)

UE5 双手握剑的实现 IK 前言 什么是IK&#xff1f; UE官方给我们提供了很多对于IK处理的节点&#xff0c;比如ABRIK、Two Bone IK、Full Body IK 、CCD IK等&#xff0c;但是看到这&#xff0c;很多人就好奇了&#xff0c;什么是IK&#xff1f; 首先我们来看看虚幻小白人的骨…

实战Java虚拟机-实战篇

一、内存调优 1.内存溢出和内存泄漏 内存泄漏&#xff08;memory leak&#xff09;&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&#xff0c;这种情况就称之为内存泄漏。内存泄漏绝大…

图论(二)-图的建立

引言&#xff1a; 建图&#xff0c;将图放进内存的方法 常用的建图方式&#xff1a;邻接矩阵&#xff0c;邻接链表&#xff0c;链式前向星 一、邻接矩阵 通过一个二维数组即可将图建立&#xff0c;邻接矩阵&#xff0c;考虑节点集合 &#xff0c;用一个二维数组定义邻接矩…

自定义原生小程序顶部及获取胶囊信息

需求&#xff1a;我需要将某个文字或者按钮放置在小程序顶部位置 思路&#xff1a;根据获取到的顶部信息来定义我需要放的这个元素样式 * 这里我是定义某个指定页面 json&#xff1a;给指定页面的json中添加自定义设置 "navigationStyle": "custom" JS&am…

子分支想主分支发起合并请求

请求合并 1.点击 git Web 页右上角打开 Merge requests 进入新页&#xff0c;点击右上角。注意选择要合并的项目 2.左边是源分支&#xff0c;右边是要合并的目标分支。 3.最后点击左下角绿色按钮 4.第一个红框 Assignee&#xff0c;选择要通知去合并的人。第二个红框不动&#…

BUUCTF---web---[BJDCTF2020]ZJCTF,不过如此

1、点开连接&#xff0c;页面出现了提示 传入一个参数text&#xff0c;里面的内容要包括I have a dream。 构造&#xff1a;?/textI have a dream。发现页面没有显示。这里推测可能得使用伪协议 在文件包含那一行&#xff0c;我们看到了next.php的提示&#xff0c;我们尝试读取…

Pytorch-08 实战:手写数字识别

手写数字识别项目在机器学习中经常被用作入门练习&#xff0c;因为它相对简单&#xff0c;但又涵盖了许多基本的概念。这个项目可以视为机器学习中的 “Hello World”&#xff0c;因为它涉及到数据收集、特征提取、模型选择、训练和评估等机器学习中的基本步骤&#xff0c;所以…

强化学习4:DQN 算法

看这篇文章之前&#xff0c;建议先了解一下&#xff1a;Q-Learning 算法。 1. 算法介绍 DQN 算法全称为 Deep Q-Network&#xff0c;即深度Q网络。它将 Q-Learning 与 Deep Learning 结合在了一起。 1.1 Q-Network Q-Learning 是使用 Q-table 才存储决策信息的&#xff0c;…

spring常用知识点

1、拦截器和过滤器区别 1. 原理不同&#xff1a; 拦截器是基于java的反射机制&#xff0c;而过滤器采用责任链模式是基于函数回调的。 2. 使用范围不同&#xff1a; 过滤器Filter的使用依赖于Tomcat等容器&#xff0c;导致它只能在web程序中使用 拦截器是一个Sping组件&am…

IO模型:同步阻塞、同步非阻塞、同步多路复用、异步非阻塞

目录 stream和channel对比 同步、异步、阻塞、非阻塞 线程读取数据的过程 同步阻塞IO 同步非阻塞IO 同步IO多路复用 异步IO 优缺点对比 stream和channel对比 stream不会自动缓冲数据&#xff0c;channel会利用系统提供的发送缓冲区、接收缓冲区。stream仅支持阻塞API&am…

【C++】哈希和unordered系列容器

目录 一、unordered系列关联式容器的引入 二、容器使用 2.1 unordered_map的文档说明 2.2 unordered_map的使用 2.3 unordered_set 三、底层结构 3.1 哈希概念 3.2 哈希表 3.3 哈希冲突 3.4 哈希函数 3.5 哈希冲突解决 3.5.1 闭散列 3.5.2 开散列 3.5.3 思考 四…