博客
关于我
520 钻石争霸赛 题解
阅读量:166 次
发布时间:2019-02-27

本文共 1692 字,大约阅读时间需要 5 分钟。

今天我遇到了一个编程问题,感觉有点难度。题目是关于判断两个数字是否近似,要求精确到小数点后一位。我的思路是先比较每一位的差异,看看是否有超过一位的差异。

首先,我需要确保两个数字的长度相同。如果长度不一样,直接返回“No”。然后,检查每一位,从最高位开始,计算绝对值的差。如果某一位的差绝对值大于1,就算错了,返回“No”。然后,我发现如果有多个位的差绝对值是1,那也算错。比如,第一位差1,第二位也差1,这样的情况也应该返回“No”。

我尝试写了下面的代码:

#include 
using namespace std;string a, b;int n;bool boolean() { int l = a.size(); bool f = 0; for (int i = 0; i < l; i++) { if (abs(a[i] - b[i]) == 1 && f == 0) { continue; } else { f = 1; return 0; } } return 1;}int main() { cin >> a; while (1) { cin >> b; if (b == "-1") break; if (a.size() != b.size()) { printf("No\n"); continue; } if (boolean()) { printf("Yes\n"); } else { printf("No\n"); } } return 0;}

但是这个代码有问题。比如,当第一位差1,第二位差0,第三位差1时,函数会在第二位检查时发现第一位差1,继续检查第二位,发现差0,继续检查第三位,发现差1,返回0。这样会误判为错误,但实际上应该是错误的,因为有超过一位差1了。

正确的逻辑应该是,只要有超过一位的差绝对值是1,就返回错误。所以,我需要在遍历每一位时,检查是否已经有位的差绝对值是1。如果有,就直接返回错误。

修改后的代码应该是:

#include 
using namespace std;string a, b;int n;bool boolean() { int l = a.size(); bool f = 0; for (int i = 0; i < l; i++) { if (abs(a[i] - b[i]) > 1) { f = 1; return 0; } if (abs(a[i] - b[i]) == 1 && f == 0) { f = 1; } } return 1;}int main() { cin >> a; while (1) { cin >> b; if (b == "-1") break; if (a.size() != b.size()) { printf("No\n"); continue; } if (boolean()) { printf("Yes\n"); } else { printf("No\n"); } } return 0;}

这样,代码会在发现任何一位差的绝对值大于1时,立即返回错误,且只会在所有位都差0或1的情况下返回正确。

转载地址:http://amwb.baihongyu.com/

你可能感兴趣的文章
mysql 查询,正数降序排序,负数升序排序
查看>>
MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
查看>>
mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
查看>>
mysql 死锁(先delete 后insert)日志分析
查看>>
MySQL 死锁了,怎么办?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 添加列,修改列,删除列
查看>>
mysql 添加索引
查看>>
MySQL 添加索引,删除索引及其用法
查看>>
MySQL 用 limit 为什么会影响性能?
查看>>
MySQL 用 limit 为什么会影响性能?有什么优化方案?
查看>>
MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)
查看>>
mysql 用户管理和权限设置
查看>>
MySQL 的 varchar 水真的太深了!
查看>>
mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
查看>>
MySQL 的instr函数
查看>>
MySQL 的mysql_secure_installation安全脚本执行过程介绍
查看>>
MySQL 的Rename Table语句
查看>>
MySQL 的全局锁、表锁和行锁
查看>>