信息学奥赛一本通 1412:二进制分类 | OpenJudge NOI 1.13 36:二进制分类

本文解析了NOIP1995竞赛中关于二进制分类的题目,涉及数制转换、函数设计及A/B类数判断。通过统计二进制中1和0的个数,展示了如何编写Python代码解决此类问题,并计算了1到1000范围内A类和B类数字的数量。
摘要由CSDN通过智能技术生成

【题目链接】

ybt 1412:二进制分类
OpenJudge NOI 1.13 36:二进制分类
本题为:NOIP1995复赛 普及组 第三题

【题目考点】

1. 数制
2. 函数

【解题思路】

设函数判断一个数是A类数还是B类数
将数值转为二进制,方法为除基取余,即为二进制下的数字拆分。
统计二进制下各位数中1的个数和0的个数,而后判断该数是A类数还是B类数。
遍历1~1000的数字,统计A类和B类数的个数

【题解代码】

解法1:
#include<bits/stdc++.h>
using namespace std;
bool isClassA(int n)//判断数字n是否是A类数
{
	int s1 = 0, s0 = 0;//s1:1的个数 s0:0的个数 
	for(int a = n; a > 0; a /= 2)//二进制下数字拆分 除基取余 
	{
		if(a % 2 == 1)//如果这一位是1 
			s1++;
		else//如果这一位是0 
			s0++;
	}	
	return s1 > s0;//如果1比0多,那么是A类数
}
int main()
{
	int ctA = 0, ctB = 0;//ctA:A类数个数 ctB:B类数个数 
   	for(int i = 1; i <= 1000; ++i)
   	{
   		if(isClassA(i))//如果i是A类数 
   			ctA++;
   		else//如果i是B类数 
   			ctB++;
    }
    cout << ctA << ' ' << ctB;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值