给出两个数字A和B相等的数字。通过在每个步骤中增加或减少A中的单个数字,找到将A转换为B的最小步骤数 例如:如果A = 133且B = 343,则可能的解决方案是133-> 233 - > 333 - > 343.所需的最低步骤数为3。
我尝试了一种蛮力的方法。这是我的伪代码
while(a!=b)
{
if(a<b)
{
find (b-a)
count number of digits in (b-a) keep it as n
add the power(10,n) to a
moves++;
}
else{
find (a-b)
count number of digits in (a-b) keep it as n
subtract the power(10,n) from a
moves++;
}
}
我无法在所有测试用例中得到正确的答案。请建议一种有效的方法。
答案 0 :(得分:6)
问题的解决方案是
function solve(a, b){
let sum = 0;
while(a>0 && b>0){
sum += Math.abs((a%10)-(b%10));
a = Math.floor(a/10);
b= Math.floor(b/10);
}
return sum;
}
console.log(solve(133, 343));
console.log(solve(1234, 1221));
答案 1 :(得分:0)
基于@K的想法。 Kirsz评论和@ marvel308回答,你可以通过std::valarray
解决这个问题,#include <iostream>
#include <valarray>
#include <string>
int solve(int a, int b)
{
std::valarray<char> va(std::to_string(a).data(), std::to_string(a).length());
std::valarray<char> vb(std::to_string(b).data(), std::to_string(b).length());
return (std::abs(va - vb)).sum();
}
int main()
{
int a, b;
std::cin >> a >> b;
std::cout << solve(a, b);
return 0;
}
这是一个不起眼的标准容器,可以在这里完成它的工作。您可以运行它here。
gremlin> a = graph.addVertex("name", "alice")
==>v[4208]
gremlin> b = graph.addVertex("name", "bobby")
==>v[40968424]
gremlin> c = graph.addVertex("name", "cindy")
==>v[4192]
gremlin> d = graph.addVertex("name", "david")
==>v[40972520]
gremlin> e = graph.addVertex("name", "eliza")
==>v[40964272]
gremlin> a.addEdge("rates",b,"tag","ruby","value",9)
==>e[2ry-38w-azv9-oe3fs][4208-rates->40968424]
gremlin> b.addEdge("rates",c,"tag","ruby","value",8)
==>e[odzq5-oe3fs-azv9-38g][40968424-rates->4192]
gremlin> c.addEdge("rates",d,"tag","ruby","value",7)
==>e[170-38g-azv9-oe6lk][4192-rates->40972520]
gremlin> d.addEdge("rates",e,"tag","ruby","value",6)
==>e[oe04d-oe6lk-azv9-oe08g][40972520-rates->40964272]
gremlin> a.addEdge("rates",e,"tag","java","value",9)
==>e[366-38w-azv9-oe08g][4208-rates->40964272]
gremlin> g.E().values("tag")
==>ruby
==>ruby
==>ruby
==>ruby
==>java
gremlin> graph.tx().commit()
当然,性能可能会下降,但如果您想要更易读的代码,这可能会更好。