Top.Mail.Ru
Ответы
Аватар пользователя
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 подскажите где ошибка.

По дате
По рейтингу
Аватар пользователя
Знаток
10мес

Hello world

Аватар пользователя
Оракул
10мес
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; 
}