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

本文共 1757 字,大约阅读时间需要 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 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>
Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
查看>>
Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
查看>>
Mysql 学习总结(89)—— Mysql 库表容量统计
查看>>
mysql 实现主从复制/主从同步
查看>>
mysql 审核_审核MySQL数据库上的登录
查看>>
mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
查看>>