蓝桥杯:优秀的拆分

news2024/9/25 9:37:46

蓝桥杯:优秀的拆分https://www.lanqiao.cn/problems/801/learning/

目录

题目描述

输入描述

输出描述

输入输出样例

输入

输出

 输入

输出

题目分析(位运算)

AC代码(Java)


题目描述

        一般来说,一个正整数可以拆分成若干个正整数的和。

        例如,1=1,10=1+2+3+4等。对于正整数 n 的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下,n 被分解为了若干个不同的 2 的正整数次幂。注意,一个数 x 能被表示成 2 的正整数次幂,当且仅当 x 能通过正整数个 2 相乘在一起得到。

        例如,10=8+2=2^{3}+2^{1}是一个优秀的拆分。但是,7=4+2+1=2^{2}+2^{1}+2^{0}就不是一个优秀的拆分,因为 1 不是 2 的正整数次幂。

        现在,给定正整数 n,你需要判断这个数的所有拆分中,是否存在优秀的拆分。若存在,请你给出具体的拆分方案。

输入描述

        输入只有一行,一个整数 n (1≤n≤10^{7}),代表需要判断的数。

输出描述

        如果这个数的所有拆分中,存在优秀的拆分。那么,你需要从大到小输出这个拆分中的每一个数,相邻两个数之间用一个空格隔开。可以证明,在规定了拆分数字的顺序后,该拆分方案是唯一的。

        若不存在优秀的拆分,输出 -1

输入输出样例

输入

6

输出

4 2 

 输入

7

输出

-1

题目分析(位运算)

        题目给定一个数n,如果他是由2的n次幂组成,那么就算是一个优秀的拆分,但是n不能为0.

        n=0的时候,也就是一个二进制数个位为1,一个二进制数的个位是1,那么这个数肯定是奇数。

        所以如果是直接我们直接输出-1即可。

        之后令 n & 0x01,每次对最后一位进行操作,如果最后一位是1,那么代表出现了对应的二进制位数,所以直接记录下来。如果最后一位是0,那么该位没有,不需要处理。

        初始化一个index = 1,每次操作了最后一位的时候都令 index = index *2;这样就能保证得到了二进制位数为1处的具体的值。

        之后操作了n的二进制最后一位,那么就令n右移一位,这样就去掉了n的最后一位二进制数,由前面的二进制数补上,这样就能依次得到n所有的二进制位数。

AC代码(Java)

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        scan.close();

        //位运算,结果添加到StringBuilder中,反转即可,如果有1,那么直接输出-1
        //奇数必定有2^0,直接输出
        if(n % 2 != 0) {
            System.out.println(-1);
            return ;
        }

        //记录可以拆分出来的数,
        List<Integer> list = new ArrayList<>();
        //偶数直接做位运算即可
        int index = 1;
        while(n>0) {
            if( (n & 0x01) == 1) list.add(index);
            index *= 2;
            n = n>>1; //右移一位
        }
        //因为存储是按照1 2 4 8 来存放的,所以需要逆序输出
        for(int i = list.size()-1;i>=0;i--) {
            System.out.print(list.get(i)+" ");
        }
    }
}

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

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

相关文章

【】:addService 和 getService

一次完整的 Binder IPC 通信过程通常是这样&#xff1a; 首先 Binder 驱动在内核空间创建一个数据接收缓存区&#xff1b; 接着在内核空间开辟一块内核缓存区&#xff0c;建立内核缓存区和内核中数据接收缓存区之间的映射关系&#xff0c;以及内核中数据接收缓存区和接收进程用…

无线传感器网络硬件设计简介

无线传感器网络硬件设计简介 无线传感器网络因其巨大的应用前景越来越受到学术界和工业界的广泛关注。本文介绍了无线传感器网络节点的体系结构&#xff0c;分析比较了国内外当前典型的硬件平台&#xff0c;重点讨论了目前无线传感器网络节点常用的处理器、射频芯片、电源和传…

孩子为什么不能玩抖音精彩回答,共勉

2 可是&#xff0c;为什么我的同学、哥哥姐姐…… 反正身边好多人都在玩&#xff1f; 我不知道你父母有没有告诉你这个道理&#xff1a; 你把时间花在哪儿&#xff0c; 你就会成为什么样的人。 他们爱玩&#xff0c;是因为两个字&#xff1a; 空虚。 想象一下&#xff…

02、Cadence使用记录之创建元器件---原理图和封装(OrCAD Capture CIS)

02、Cadence使用记录之创建元器件—器件原理图符号和封装&#xff08;OrCAD Capture CIS&#xff09; 参考的教程是B站的视频&#xff1a;allegro软件入门视频教程全集100讲 前置教程&#xff1a; ## 01、Cadence使用记录之新建工程与基础操作&#xff08;原理图绘制&#xf…

新闻文本分类任务:使用Transformer实现

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

13.网络爬虫—多进程详讲(实战演示)

网络爬虫—多进程详讲 一进程的概念二创建多进程三进程池四线程池五多进程和多线程的区别六实战演示北京新发地线程池实战 前言&#xff1a; &#x1f3d8;️&#x1f3d8;️个人简介&#xff1a;以山河作礼。 &#x1f396;️&#x1f396;️:Python领域新星创作者&#xff0c…

Spark SQL实战(07)-Data Sources

1 概述 Spark SQL通过DataFrame接口支持对多种数据源进行操作。 DataFrame可使用关系型变换进行操作&#xff0c;也可用于创建临时视图。将DataFrame注册为临时视图可以让你对其数据运行SQL查询。 本节介绍使用Spark数据源加载和保存数据的一般方法&#xff0c;并进一步介绍…

node安装

一、下载nodejs的安装包&#xff1a; 下载地址&#xff1a;https://nodejs.org/zh-cn/download 根据自己电脑系统及位数选择&#xff0c;一般都选择windows64位.msi格式安装包 二、改变nodejs的下载依赖包路径 安装完nodejs后&#xff0c;也同时安装了npm&#xff0c; npm是…

半监督语义分割_paper reading part1

Assignment 要解决的问题思路方法结果自己的想法 01 A Survey on Semi-Supervised Semantic Segmentation University of Granada, 18071, Granada, Spain 2023.02出版 problem to solve ss先前的&#xff08;19年&#xff09;不适用先前的调研包含弱监督&#xff0c;ss不…

Docker Desktop使用PostgreSql配合PGAdmin的使用

在看此教程之前&#xff0c;请先下载安装Docker Desktop 安装成功可以查看版本 然后拉取postgresql的镜像&#xff1a;docker pull postgres:14.2 版本可以网上找一个版本&#xff0c;我的不是最新的 发现会报一个问题 no matching manifest for windows/amd64 10.0.19045 i…

小心,丢失的消息!RocketMQ投递策略帮你解决问题!博学谷狂野架构师

RocketMQ消息投递策略 作者: 博学谷狂野架构师GitHub&#xff1a;GitHub地址 &#xff08;有我精心准备的130本电子书PDF&#xff09;只分享干货、不吹水&#xff0c;让我们一起加油&#xff01;&#x1f604; 前言 RocketMQ的消息投递分分为两种&#xff1a;一种是生产者往MQ …

java中级面试题

1.假如有两个线程共同操作数据库&#xff0c;以乐观锁的角度考虑&#xff0c;怎么确保不会发生并发问题&#xff1f; PS&#xff1a;考点是CAS&#xff0c;比较并替换。CAS中有三个值&#xff0c;内存中的值&#xff0c;新值&#xff0c;旧值。 假如内存中的值是2000&#xf…

[C++]string类的模拟实现和相关函数的详解

目录string总体架构具体实现默认成员函数构造函数构造拷贝函数析构函数赋值重载[]相关操作函数c_str() && size()reserve() && resize()push_back() && append()find()inserterase() && clear其余操作符重载< 、 <、 >、 >、 !<…

【系统集成项目管理工程师】项目整体管理

&#x1f4a5;十大知识领域&#xff1a;项目整体管理 项目整体管理包括以下 6 个过程: 制定项目章程定项目管理计划指导与管理项目工作监控项目工作实施整体变更控制结束项目或阶段过程 一、制定项目章程 制定项目章程。编写一份正式文件的过程&#xff0c;这份文件就是项目章程…

某程序员哀叹:月薪四五万,却每天极度焦虑痛苦,已有生理性不适,又不敢裸辞,怎么办?

高薪能买来快乐吗&#xff1f; 来看看这位程序员的哀叹&#xff1a; 实在是扛不住了&#xff0c;每天都在极度焦虑和痛苦中度过&#xff0c;早上起来要挣扎着做心理建设去上班&#xff0c;已经产生生理性的头晕恶心食欲不振。有工作本身的原因&#xff0c;更多是自己心态的问…

OpenCV+FFmpeg 实现人脸检测Rtmp直播推流(Python快速实现)

实现效果 windows平台笔记本摄像头视频采集、人脸识别&#xff0c;识别后将视频推流到RTMP流媒体服务器&#xff0c;在任意客户端可以进行RTMP拉流播放。 效果如图&#xff1a; 使用VLC播放器进行拉流。 准备工作 需要先安装OpenCV的python包以及FFmpeg。 对于ffmpeg有两…

Java——删除链表中重复的节点

题目链接 牛客在线oj题——删除链表中重复的节点 题目描述 在一个排序的链表中&#xff0c;存在重复的结点&#xff0c;请删除该链表中重复的结点&#xff0c;重复的结点不保留&#xff0c;返回链表头指针。 例如&#xff0c;链表 1->2->3->3->4->4->5 处…

【Vue】学习笔记-数据代理

数据代理 Object.defineproperty方法 <script type"text/javascript">let number18let person{name:张三,sex:男,}//age属性 不参与遍历Object.defineProperty(person,age,{//value:18,//enumerable:true, //控制属性是否可以枚举&#xff0c;默认值是false//…

科技成果评价最新攻略,你确定不来看看?

一、什么是科技成果评价&#xff1f; 是指按照委托者的要求&#xff0c;由具有评价资质的第三方专业机构聘请专家&#xff0c;坚持实事求是、科学民主、客观公正、注重质量、讲求实效的原则&#xff0c;依照规定的程序和标准&#xff0c;对被评价科技成果进行审查与辨别&#…

[Java Web]VUE | vue:一项Java Web开发中不可或缺的前端技术

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;Java Web ⭐如果觉得文章写的不错&#xff0c;欢迎点个关注一键三连&#x1f609;有写的不好的地方也欢迎指正&a…