You Are Given a Decimal String...
B. You Are Given a Decimal String...
这个题需要求出从某一个尾数 n 变为 m 所需要的 x 和 y 的最小个数(i+j) 那么就需要预处理出一个数组来存放这个值。数组 b[ ] 中存的是所需要多添加的数的个数 (i+j-1)
int b[10];
for (int i = 0; i < 10; ++i) b[i] = inf;
for (int i = 0; i < 10; ++i)
for (int j = 0; j < 10; ++j)
{
if (i || j)
b[(i * x + j * y) % 10] = min(b[(i * x + j * y) % 10], i+j-1);
//i+j-1是需要多添加的数的个数
}
代码:
// Created by CAD on 2019/8/9.
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
string s;
cin >> s;
for (int x = 0; x < 10; ++x)
for (int y = 0; y < 10; ++y)
{
int b[10];
for (int i = 0; i < 10; ++i) b[i] = inf;
for (int i = 0; i < 10; ++i)
for (int j = 0; j < 10; ++j)
{
if (i || j)
b[(i * x + j * y) % 10] = min(b[(i * x + j * y) % 10], i + j - 1);
}
int ans = 0;
for (int i = 0; s[i + 1] != '\0'; ++i)
if (b[(s[i + 1] - s[i] + 10) % 10] == inf)
{
ans = -1;
break;
} else ans += b[(s[i + 1] - s[i] + 10) % 10];
cout << ans;
if (y == 9) cout << endl;
else cout << " ";
}
return 0;
}
CAD加油!欢迎跟我一起讨论学习算法,QQ:1401650042