5153. 删除


5153. 删除

原创 于 2023-09-27 10:05:49 发布 · 粉丝可见 · 201 阅读 · 0 · 0 · 本内容遵循CC 4.0 BY-SA版权协议 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 GEO检测 · 编辑
文章链接:https://blog.csdn.net/hacker_51/article/details/133340680

题目:

样例1:

bash<br/>3454<br/>
YES
344

样例2:

bash<br/>10<br/>
YES
0

样例3:

bash<br/>111111<br/>
NO

思路:

这道题就三个条件

关键条件是  能够被 8 整除。    而能被 8 整除的有一个重要的性质是

能被8整除的数的特征是它的末三位是0、8、16、24、32、40、48、56、64、72、80、88、96中的一个
这个特征是由能被2整除和能被4整除的数的特征推导出来的。掌握了这个特征,我们就可以很方便地判断一个数能否被8
整除了。

即看整个数中的 末三位是否可以被 8 整除,然后这是个不计删除个数,所以我们只要找到这些数是否在 num 里面即可。

代码详解如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <unordered_map>
#define endl '\n'
#define YES puts("YES")
#define NO puts("NO")
#define umap unordered_map
#pragma GCC optimize(3,"Ofast","inline")
#define ___G std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 2e6 + 10,MOD = 998244353;
string num;

// 寻找满足末3位能够被 8 整除的数,是否在 num 里面
inline bool FindAns(string &ans)
{
int n = ans.size(),idx = 0;

// 循环寻找
for(auto i : num)
{
if(i == ans[idx]) ++idx;
if(idx == n) return true;
}

return false;
}
inline void solve()
{
string ans;

getline(cin,num);

// 由于不计删除个数,所以我们找到 末三位 可以被8整除 的数字计科
// 获取在 末三位 以内的数字可以被 8 整除的数
// i += 8 就可以满足被 8 整除
for(int i = 0;to_string(i).size() <= 3;i += 8)
{
// 获取该性质的数字
ans = to_string(i);

// 开始判断是否是答案
if(FindAns(ans))
{
cout << "YES" << endl << ans << endl;
return ;
}
}
cout << "NO" << endl;
}


int main()
{
// freopen("a.txt", "r", stdin);
___G;
int _t = 1;
// cin >> _t;
while (_t--)
{
solve();
}

return 0;
}

最后提交:


觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭

微信二维码

wechat pay

支付宝二维码

ali pay

5153. 删除
http://blog.angindem.cn/2023/09/27/Angindem-CSDN博客/069_69/
作者
Angindem
发布于
2023年9月27日
许可协议