10мес



Программирование
+2Программирование С++. Не могу решить задачу.
1234567891011121314151617181920212223242526272829303132333435363738394041424344
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int x,y;
cin>>x>>y;
queue<pair<int,int>> q;
unordered_set<int> visited;
visited.insert(x);
q.push({x,0});
while(!q.empty()){
int n=q.front().first;
int k=q.front().second;
q.pop();
for(int i=0;i<=9;i++)
{
int plus=n+i;
int multiply=n*i;
int minus=n-i;
if (plus == y || multiply == y || minus == y) {
cout << k + 1;
return 0;
}
if (visited.find(plus) == visited.end() && plus < y) {
q.push({plus, k + 1});
visited.insert(plus);
}
if (visited.find(multiply) == visited.end() && multiply < y) {
q.push({multiply, k + 1});
visited.insert(multiply);
}
if (visited.find(minus) == visited.end() && minus >= 0) {
q.push({minus, k + 1});
visited.insert(minus);
}
}
}
return 0;
}
Минимальное количество арифметических операций Задано число X. Возможны следующие преобразования с числом X=X+c, где c -- цифра. X=X−c, где c -- цифра. X=X⋅c, где c -- цифра. Обратите внимание, c может принимать значение равное 0.
Необходимо найти минимальное количество операций, которые необходимо применить к числу X, чтобы получить число Y.
Формат ввода. В первой строке заданы два числа X,Y.
Формат вывода. В единственной строке выведите ответ на задачу.
Пытаюсь решить эту задачу но выдает WA подскажите где ошибка.
По дате
По рейтингу
Hello world
1234567891011121314151617181920212223242526272829303132333435363738394041
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
long long x, y;
cin >> x >> y;
queue<pair<long long, int>> q;
unordered_set<long long> visited;
visited.insert(x);
q.push({x, 0});
while(!q.empty()){
long long n = q.front().first;
int k = q.front().second;
q.pop();
if (n == y) {
cout << k;
return 0;
}
for(int i = 0; i <= 9; i++) {
long long plus = n + i;
long long multiply = n * i;
long long minus = n - i;
if (visited.find(plus) == visited.end()) {
q.push({plus, k + 1});
visited.insert(plus);
}
if (visited.find(multiply) == visited.end()) {
q.push({multiply, k + 1});
visited.insert(multiply);
}
if (minus >= 0 && visited.find(minus) == visited.end()) {
q.push({minus, k + 1});
visited.insert(minus);
}
}
}
cout << -1; // если решение не найдено
return 0;
}