题解-二进制运算

6.1-16. 二进制分类【1.13编程基础之综合应用36】 16 二进制分类【1.13编程基础之综合应用36】 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。 例如: (13)10=(1101)2,其中1的个数为3,0的个数为1,则称此数为A类数; (10)10=(1010)2,其中1的个数为2,0的个数也为2,称此数为B类数; (24)10=(11000)2,其中1的个数为2,0的个数为3,则称此数为B类数; 程序要求:求出1~1000之中(包括1与1000),全部A、B两类数的个数 阅读详情

二进制运算

Description
若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。

例如:

(13)_{10} =(1101)_2

其中1的个数为3,0的个数为1,则称此数为A类数;

(10)_{10} =(1010)_2

其中1的个数为2,0的个数也为2,称此数为B类数;

(24)_{10} =(11000)_2

其中1的个数为2,0的个数为3,则称此数为B类数;

程序要求:
求出1~n之中(包括1与n),全部A、B两类数的个数。(其中n<=1000)
Input
输入一行一个数n
Output
在一行中输出两个整数A和B,A表示A类数的个数,B表示B类数的个数,AB之间由一个空格分隔,除此之外不要再输出其他多余的东西。
Sample Input 1
1000
Sample Output 1
538 462
YCOJ:NOIP1995
提示:借助十进制转二进制的方法,在程序里进行累加,将零和一分别统计,再将统计的数比较累加。
是的,这道题很坑,比较零和一都要取数,(不说了( ̄▽ ̄)~*)。
对于二进制数,我们先来看看这个代码:

#include <bits/stdc++.h>
using namespace std;
int a[10010];
int main(){
	int n;
	cin>>n;
	int k=0;
	while(n!=0){
		a[k]=n%2;//求余数
		n/=2;//求他的位数
		k++;
	}
	for(int i=k-1;i>=0;i--){//倒序输出(转二进制的方法自己去看,不关我事罒ω罒)
		cout<<a[i];
	}
	return 0;
}

相信大家都理解了,(不理解百度)。
解析:按照去二进制的方法,将for循环从1——n来限制范围,为了避免超时,就要将i的值统计一下,最后来判断如果1比0多就++,否则再++,最后将统计的数拿来比较,统计出个数。
AC代码:

#include <bits/stdc++.h>
using namespace std;
int a[10010];
int main(){
	int n;
	cin>>n;
	int sum=0,ans=0;
	for(int i=1;i<=n;i++){
		int cnt=0,tot=0;
		int asd=i;
		while(asd!=0){
			int sdf=asd%2;//除余数 
			if(sdf==1){
				cnt++;
			}else if(sdf==0){ 
				tot++;
			}
			asd/=2;
			} 
		if(cnt>tot){
				sum++;
			}else{
				ans++;
			}
		}
		cout<<sum<<" "<<ans;
	return 0;
}

然后就简单了 。

1412:二进制分类(C C++) 【题目描述】 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。 例如: (13)10=(1101)2,其中1的个数为3,0的个数为1,则称此数为A类数; (10)10=(1010)2,其中1的个数为2,0的个数也为2,称此数为B类数; (24)10=(11000)2,其中1的个数为2,0的个数为3,则称此数为B类数; 程序要求:求出1∼1000之中(包括1与1000),全部A、B两类数的个数。 【输入】 (无) 【输出】 一行,包含 阅读详情

相关推荐

2021年6月青少年C/C++软件编程(二级)等级考试试卷及答案解析

2021年6月青少年C/C++软件编程(二级)等级考试试卷及答案解析 真题解析

长春高老师编程 1374

二进制数问题

二进制数问题题目描述程序要求:输入输出样例输入样例输出源程序运行结果 题目描述 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。 例如: (13)10=(1101)2 其中1的个数为3,0的个数为1,则称此数为A类数; (10)10=(1010)2 其中1的个数为2,0的个数也为2,称此数为B类数; (...

amazz的博客 3414

实战避坑:在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时,必须搞清的P2P DMA与IOMMU那些事

本文深入探讨在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时P2P DMA与IOMMU的关键问题,解析PCIe架构中的地址转换、P2P DMA与标准DMA的区别,以及IOMMU对性能的影响。通过实战案例和调优建议,帮助用户避免常见配置陷阱,提升AI训练集群的数据传输效率。

weixin_33720078的博客 440

一本通 1412:二进制分类

【题目描述】 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。 例如: (13)10=(1101)2,其中1的个数为3,0的个数为1,则称此数为A类数; (10)10=(1010)2(,其中1的个数为2,0的个数也为2,称此数为B类数; (24)10=(11000)2,其中1的个数为2,0的个数为3,则称此数为B类数; 程序要求:求出1∼1000之中(包括1与1000),全部A、B两类数的个数。 【输入】 (.

weixin_63587703的博客 1369

std::map看来可以被淘汰了?可以用vector来替代,而且更好

vector的优势在于内存连续,可以先std::sort,然后std::lower_bound,或者std::binary_search。而std::map,insert的时候,需要new出内存。

tumu_C的博客 1019

别再只接个放大器了!压电传感器测量电路(电压/电荷放大器)的5个实战配置要点

本文深入解析压电传感器测量电路中的5个关键实战配置要点,包括电缆长度选择、输入阻抗匹配、过载保护设计、低频噪声抑制及放大器选型策略。特别针对电压放大器和电荷放大器的应用场景差异提供工程实践建议,帮助工程师有效解决信号失真、噪声干扰等常见问题,提升测量精度和系统可靠性。

weixin_26869081的博客 301

CF2119C A Good Problem 题解(详细推导二进制运算性质)

超级详细,一切结论均有证明

2401_84512298的博客 858

激光雷达接收芯片选型指南:APD、SiPM、SPAD阵列的优缺点对比

本文深入对比了激光雷达接收芯片APD、SiPM和SPAD阵列的核心技术原理与性能差异。APD作为线性模式工作的稳健选择,动态范围大;SiPM具备单光子探测和高增益优势;而SPAD阵列凭借像素级数字读出和集成TDC,在时间分辨率与系统集成度上领先。文章从灵敏度、时间精度、动态范围及系统成本等多维度剖析,为不同应用场景(如车载雷达、Flash LiDAR、消费电子)的芯片选型提供实战指南。

ik6789012的博客 655

位运算刷题+总结

1. 给你一个数n,确定这个数的二进制表示上的第x位是0还是1?(n>>x) & 1,== 0就是0,==1就是12. 将一个数n的二进制表示的第x位修改为1?3.将一个数n的二进制表示的第x为修改为0?4. 提取一个数n二进制表示中的最右侧的1?n & (-n) 左侧被n取反后再按位与之后都变成了0,1的右侧都加1都变成了05. 干掉一个数n二进制表示中最右侧的1?n & (n-1) 减一之后会向左边借1,借位的位置变为了0,它的右侧都变成了1,再按位与之后包括它本身都会变成0。

的博客 1185

佳能C3025打印机扫描方法

佳能C3025彩色打印机扫描方法 步骤一、如果打印机处于休眠状态,可按图中标记的按钮唤醒打印机; 然后点击屏幕上的【扫描】 步骤二、扫描类型选择【文件】 步骤三、点击屏幕上的【地址簿】 步骤四、此时屏幕胡看到名字,如果看不到自己的名字,可往下滑动直到看到自己的名字,然后点击自己的名字,再点击右下角的【应用】 步骤五、点击【发送设置】,可看到文件格式为PDF,点击可以选择JPEG的图片格式。...

weixin_46019317的博客 2万+

昇腾910B多卡环境下hccl-test性能调优实战

本文详细介绍了昇腾910B多卡环境下hccl-test性能调优的实战经验,包括环境搭建、CANN工具链配置、性能测试与高级调优技巧。通过优化缓冲区、PCIe拓扑和中断亲和性设置,显著提升多卡通信效率,为AI训练提供稳定高效的计算支持。

weixin_29216049的博客 830

二进制常见题解

本文不代表二进制全题型,只代表本菜学了什么,遇到什么题(持续更新)

fatjob的博客 251

杰理AC696N系列芯片外部中断使用教程

本教程详细介绍了杰理AC696N芯片的GPIO引脚中断唤醒功能实现方法。主要内容包括: 功能特点: 支持任意GPIO引脚配置为中断源 可灵活选择上升沿或下降沿触发 提供自定义中断回调函数接口 核心实现: 通过port_wkup_interrupt_init()函数配置GPIO属性 使用request_irq()注册中断服务程序 提供中断使能/关闭接口 注意事项: 此功能在低功耗模式下无效 需注意引脚冲突和中断优先级设置 建议在回调函数中实现简洁的逻辑 应用场景: 按键检测 外部信号监测 事件触发等 本方案提

qq_42014563的博客 944

LeetCode题解:231. 2的幂,位运算取二进制中最右边的1,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/power-of-two/ 解题思路: 只有大于0的数才可以是2的幂 2的幂在二进制中满足条件:一个1后跟n个0,例如8=00001000。 如果不是2的幂,其二进制中有不止一个1,例如6=00000110。 因此只需要判断二进制是否满足条件一个1后跟n个0即可,判断方法如下: 以n=8为例,8的二进制为00001000,-8的二进制为11111000,8 & -8 = 00001000等于8。 以n=6为例,6的二进制

Lee Chen的博客 256

Pyhon在振动信号处理中的高级应用(一):振动信号特征(时域、频域)提取

文章目录一、概述二、算法原理2.1 时域统计特征三、python代码实现 一、概述 二、算法原理   这里我们借鉴西安交通大学机械学院雷教授的论文《Fault diagnosis of rotating machinery based on multiple ANFIS combination with GAs》相关研究成果。雷教授在论文中共列举了4类共24种振动信号的时域和频域特征。 2.1 时域统计特征 p1=∑n=1Nx(n)NP2=∑n=1N(x(n)−p1)2N−1p3=(∑n=1N∣x(n)∣N

白银时代的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

AcWing 116. 飞行员兄弟 题解 暴力二进制位运算枚举

题目 思路:纯暴力二进制枚举 我们知道,一个点,改变状态两次等于没改变 所以在求最小改变次数的时候,每个点是最多只改变一次的,因此我们可以用位运算遍历出这所有的情况 16个位置,每个位置有两种情况,遍历每一种情况,可以看成从0到216-1的遍历 每个数字的二进制表示:1表示要改变状态,0表示不要改变状态 时间复杂度为: 而要求以字典序输出,其实按从小到大二进制枚举,一定就是按字典序输出改变 代码 #include<iostream> #include<algorithm>

Alkali!的博客 548

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

位运算(计算二进制中1的个数)

什么是lowbitlowbit运算是指获取一个二进制数中最右边的1所对应的数值。具体来说,lowbit运算可以通过对一个数取反然后加1,再与原数进行按位与的方式来实现。例如,对于一个数x,其lowbit可以通过以下公式来计算:其中,-x是对x进行取反然后加1得到的结果。例如,对于二进制数101100(十进制数为44),它的lowbit为100(十进制数为4)。这是因为最右边的1所对应的位是第三位,对应的数值为4,因此lowbit(x) = 4。

2301_80962683的博客 559

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【AcWing 801题解】二进制中1的个数

函数的作用是提取一个整数的二进制表示中最低位的 1,它通过一个位运算。函数来高效地实现这一过程。具体做法是,对于每个数字。,最终计数即为二进制表示中 1 的个数。本题要求计算每个数字的二进制表示中。去除该位的1,每去除一个。

weixin_53552267的博客 296

位运算 #常见位运算总结 #题解

本文总结了常见的位运算操作及其在LeetCode算法题中的应用。内容涵盖基础位运算操作(左移、右移、按位与/或/异或)、位运算技巧(提取最右侧1、去除最右侧1等),并通过10道LeetCode题目(如位1计数、汉明距离、只出现一次的数字等)展示了位运算的实际应用。特别强调了位运算在优化空间复杂度方面的优势,如利用单个变量的比特位实现哈希表功能(位图思想)。文章还详细解析了每道题的位运算解法,包括代码实现和优化思路,为处理二进制相关算法问题提供了实用指导。

Distinguished_z的博客 1092

AcWing 801 二进制中1的个数 题解(位运算)

#include<iostream> using namespace std; int lowbit(int x){ return x & -x; } int main() { int n; cin>>n; while(n -- ){ int x, res = 0; cin>>x; while(lowbit(x)){ x -= lowbit(x); res ++ ; } cout<<res<&lt

qiaodxs的博客 98

Leetcode 题解 - 位运算(13) :统计从 0 ~ n 每个数的二进制表示中 1 的个数

[LeetCode] Counting Bits 计数位 Given a non negative integer numbernum. For every numbersiin the range0 ≤ i ≤ numcalculate the number of 1's in their binary representation and return them as an ...

qq_40320556的博客 342

【每日刷题】二进制求和

官方题解还有一个位运算,但是需要用高精度而且好像得用python吧。感兴趣的可以自己去看看。题解一就够AC的了,题解二是从底层优化了下时间,题解三是比较优雅的简洁代码。

m0_60570002的博客 327

LeetCode每日一题题解:693. 交替位二进制数-题解-python && C++源代码-经典位运算

693. 交替位二进制数 难度简单131收藏分享切换为英文接收动态反馈 给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。 示例 1: 输入:n = 5 输出:true 解释:5 的二进制表示是:101 示例 2: 输入:n = 7 输出:false 解释:7 的二进制表示是:111. 示例 3: 输入:n = 11 输出:false 解释:11 的二进制表示是:1011. 提示: 1 <= n <

爱吃橘子的小翟 1563

Leetcode 题解 - 位运算(1) 统计两个数的二进制表示有多少位不同

原理 1. 基本原理 0s 表示一串 0,1s 表示一串 1。 x ^ 0s = x x & 0s = 0 x | 0s = x x ^ 1s = ~x x & 1s = x x | 1s = 1s x ^ x = 0 x & x = x x | x = x 利用 x ^ 1s = ~x 的特点,可以...

qq_40320556的博客 300

01 位运算

1-1000这1000个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。《程序员面试金典》【cc150 :crack the code of interview】、《挑战程序设计竞赛》、《程序员代码面试指南》、《剑指offer》、《编程之美》、《算法导论》位移动到最低位,然后与 1 按位与,得到该位的值(0 或 1)。按位与(&)、按位或(|)、按位异或(^)、按位取反(~)十转二、二转十、二转八、八转二、二转十六、十六转二。左移(<<)、右移(>>)02 查找与排序(上)

wujiao__11的博客 810

ACM新手DAY 1 位运算与(矩阵)快速幂

题解 A - 最低位 首先了解题意。读入一个整数,对它的二进制形式进行操作:取从他的右边向左边第一个不为0的一段二进制数,转换成十进制形式。如,26的二进制形式是11010,取出10这一段,输出8。 接着开始编译代码 多组输入: while(cin>>n && n) {} 逻辑部分: int c(0); while(~ n & 1) ...

listening~的博客 340
上一篇: 题解-面积
下一篇: 题解-黑熊过河
Cancelleds
博客等级 码龄8年 1110粉丝 166原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值