链接:https://ac.nowcoder.com/acm/contest/77231/C
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
Special Judge, 64bit IO Format: %lld
题目描述
小红来到了红魔馆。众所周知,红魔馆的馆主是一只 495 岁的吸血鬼,所以她非常喜欢 495 这个数。
现在,小红拿到了一个正整数,她想在这个正整数的结尾增加尽可能少的数字,使得该数字变成 495 的倍数。请你给出任意一个添加方案。
输入描述:
一个正整数 n
1 ≤ n ≤ 1e18
输出描述:
如果给定是正整数本身就是 495 的倍数,请输出 -1。
否则输出一个数字串,代表将该数字串添加到原数的结尾。有多解时输出任意即可,你只需要保证该数字串长度尽可能短。
示例1
输入
49
输出
5
说明
只需要添加一个 5 即可。
示例2
输入
9
输出
90
说明
添加 90 后,990 是 495 的倍数。
解答
- 误区:找每个位上数字相加 % 18 == 0 的数,因为看到 495 各个位上相加为 18
- 这种类型思路:将这个数 % 495,余数进行添加
- 比如在后面添加一个数,看它是否是 495 倍数,也就是余数是否为 0 ,而假设不为 0 ,也就是余数乘 10 + 这个数,因为前面整除部分相当于乘 10
- 所以就判断是否加一个数这个余数是否为 0 ,直接 DFS
#include <iostream>
using namespace std;
string ans = "100000000000000";
typedef long long LL;
void dfs(int yu, string now)
{
if (yu == 0)
{
if (now.length() < ans.length()) ans = now;
return;
}
if (now.length() > ans.length()) return;
for (int i = 0; i <= 9; i++)
{
dfs((yu * 10 + i) % 495, now + (char)('0' + i));
}
}
int main()
{
LL n;
cin >> n;
n %= 495;
if (n == 0)
{
cout << -1 << endl;
return 0;
}
dfs( n, "");
cout << ans << endl;
return 0;
}
标签:ans,DFS,length,添加,495,余数,运用,now
From: https://www.cnblogs.com/xingzhuz/p/18141790