ZJU-199001 第三周练习 2 数字特征值 位运算算法
题目
对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值. 对于一个整数, 从个位开始对每一位数字编号, 个位是 \(1\) 号, 十位是 \(2\) 号, 以此类推. 这个整数在第位上的数字记作 \(x\), 如果 \(x\) 和 \(n\) 的奇偶性相同, 则记下一个 \(1\), 否则记下一个 \(0\). 按照整数的顺序把对应位的表示奇偶性的 \(0\) 和 \(1\) 都记录下来, 就形成了一个二进制数字. 比如, 对于 \(342315\), 这个二进制数字就是 \(001101\).
代码
#include <stdio.h>
int main() {
int n;
scanf_s("%d", &n);
int e = 0;
for (int i = 0; n; i++) {
e ^= (n + i & 1) << i;
n /= 10;
}
printf("%d", e);
return 0;
}
解析
要获取一个数字 \(x\) 第 \(n\) 位的奇偶, 只需要除以 \(10^{n-1}\). int
的特性将使结果向下取整, 例如: \(342315/10^1=34231\), 我们仅需要关注结果的个位数即可. 同时, 奇偶性相同的数字相加, 结果为偶数; 反之为奇数. 计 \(x\) 从左数第一位到右数第 \(n\) 位, 与数位相加, 即可分析奇偶性.
此处, 我们有两种判断奇偶的方法:
- 使用整除运算符
%
, 偶数结果为 0. - 与 1 进行按位与操作 (原理见此处), 偶数结果为 0. 本代码使用此种算法.
Tip: 加和结果为偶数时结果为 1 会更方便, 因此 for 循环中的 i 从 0 开始计数.
我们知道, 位运算中的左移的效果是乘二, 因此, 我们将上述过程中得到的 0 或 1 进行左移, 偏移量即目前所在的数位. 如此, 我们不必再去调用 pow()
函数.
当然, 你也可以设置一个值 pow2
, 在每次循环末翻倍, 加上之前提到的整除法判断奇偶, 你的代码大致如下.
int e = 0;
int pow2 = 1;
for (int i = 0; n; i++) {
e ^= (n + i) % 2 * pow2;
n /= 10;
pow2 *= 2;
}
ZJU-199001 第三周练习 2 数字特征值 位运算算法的更多相关文章
- 中国MOOC_零基础学Java语言_第3周 循环_2数字特征值
2 数字特征值(5分) 题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作 ...
- 九度OJ 1256:找出两个只出现了一次的数字 (位运算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:568 解决:186 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输入: 输入的 ...
- ACM学习历程—计蒜客15 单独的数字(位运算)
http://nanti.jisuanke.com/t/15 题目要求是求出只出现一次的数字,其余数字均出现三次. 之前有过一个题是其余数字出现两次,那么就是全部亦或起来就得到答案. 这题有些不太一样 ...
- 九度OJ 1351:数组中只出现一次的数字 (位运算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3098 解决:906 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输入: 每个 ...
- 找唯一不出现三次而出现1次的数子O(n)位运算算法
之前两次那个是异或运算处理.这次以为也是类似.可是没想出来. 高富帅想出来了算法,转为bitset,然后加起来 同样的话 要么0+0+0 要么1+1+1,最后剩下的 能够通过%3 算出0 或1.思想是 ...
- 网易云课堂_程序设计入门-C语言_第三周:循环_2数字特征值
2 数字特征值(5分) 题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作 ...
- 20145213《Java程序设计》第三周学习总结
20145213<Java程序设计>第三周学习总结 教材学习内容总结 正所谓距离产生美,上周我还倾心于Java表面的基础语法.其简单的流程结构,屈指可数的基本类型分类,早已烂熟于心的运算符 ...
- 20145304 Java第三周学习报告
20145304 <Java程序设计>第三周学习总结 教材学习内容总结 1.定义类: 类定义时使用class关键词,建立实例要使用new关键词. 代码如下: /*定义类 书上例子 衣服的型 ...
- 20145337《Java程序设计》第三周学习总结
20145337 <Java程序设计>第三周学习总结 教材学习内容总结 类与对象 类与对象的关系:要产生对象必须先定义类,类是对象的设计图,对象是类的实例.我觉得在视频中对类与对象关系的描 ...
随机推荐
- .NET 6.0.6 和 .NET Core 3.1.26、Visual Studio 2022 17.2 和 17.3 Preview 2 和 .NET 7.0 Preview 5 同时发布
Microsoft 昨天发布了适用于 .NET 6.0.6 和 .NET Core 3.1.26.NuGet.Visual Studio 2019 和 Visual Studio 2022 17.2 ...
- 能快速搭建三维场景,这款3D全场景编辑器你还没用过吗?
今天就给大家分享一个非常好用的老子云3D全场景编辑器,不仅可以基于GIS数据,帮助用户快速搭建3D城市大场景.实现Web端流畅展示. 并且搭建的3D场景可离线开发成一个空间信息直观的.可交互.易于设计 ...
- Pyinstaller打包pikepdf失败的问题排查
问题 最近在项目里用到了pikepdf这个库,用于实现pdf水印插入的一个小功能,源码调试阶段运行一切OK但是在出包时报了如下异常. Traceback (most recent call last) ...
- java反射之-Javabean与Map的互转
1.BeanUntils工具类的准备 /** * @ClassName: BeanUtils * @Description: * @Author: songwp * @Date: 9:02 2022/ ...
- Linux for CentOS 下的 nginx 绿色安装-超省心安装
1.我这里是nginx-1.13.0-1.x86_64 .rpm(点击下载)版本的. 2.安装nginx的相应环境.有些环境可能不必须,但是安装了,确保以防万一,多多益善 yum install gd ...
- Tapdata Cloud 版本上新!率先支持数据校验、类型映射等6大新功能
Tapdata Cloud cloud.tapdata.net Tapdata Cloud 是国内首家异构数据库实时同步云平台,目前支持 Oracle.MySQL.PG.SQL Server.Mong ...
- CF1132D Stressful Training
题目链接 题目 见链接. 题解 方法一 知识点:贪心,优先队列,二分. 显然,这道题可以用二分答案做.check 函数可以用小根堆,让维持时间最小的先充电. 但是不优化这道题会炸.有两个关键优化:一个 ...
- Java实现ATM架构设计
云ATM架构设计 说明 https://www.processon.com/view/link/62ca68ee5653bb74ddcdd582 点击连接可查看项目流程图,帮助小伙伴们开发 启动程序( ...
- idea 内置tomcat jersey 上传文件报403错误
Request processing failed; nested exception is com.sun.jersey.api.client.UniformInterfaceException: ...
- CSS 上下居中和最低高度语法
/*上下居中*/ vertical-align:center; font-size=line-height; /*最低高度*/ height:auto!important; height:400px; ...