Другие языки программирования и технологии

Програмирование на С++, нахождение ошибки

Здравствуйте, подскажите пожалуйста что не так в этой программе

#include

using namespace std;

int main()
{
int n;
int x;
cin>>n;
x=n/3;
if(x*3==n){
if((n%10==0)||(n%10==3)||(n%10==6)){
n=n+3;
}
if(n%10==9){
n=n-3;
}
}
if(x*3!=n){
if((x*3)%10==0||(x*3)%10==3||(x*3)%10==6){
n=x*3;
}
if(n%10==9){
n=(x*3)+4;
}
}
cout<<n<<endl;
return 0;
}
Когда ввожу 123 то он выводит 123 а не должен!

Вот сообственно текст задачи...
Дано число. В этом числе необходимо изменить одну цифру таким образом, чтобы
новое число делилось на 3 и было бы максимально возможным. В исходном числе нужно
обязательно изменить одну цифру, даже если исходное число уже делилось на 3.
Программа получает на вход одно длинное натуральное число. Длина числа может
достигать 100 цифр.
Программа должна вывести другое натуральное число, удовлетворяющее условиям:
1. Новое число должно отличаться от данного ровно одной цифрой.
2. Новое число должно делиться на 3.
3. Новое число должно быть максимально возможным из всех таких чисел.
Здравствуйте, подскажите пожалуйста что не так в этой программе

#include

using namespace std;

int main()
{
int n;
int x;
cin>>n;
x=n/3;
if(x*3==n){
if((n%10==0)||(n%10==3)||(n%10==6)){
n=n+3;
}
if(n%10==9){
n=n-3;
}
}
if(x*3!=n){
if((x*3)%10==0||(x*3)%10==3||(x*3)%10==6){
n=x*3;
}
if(n%10==9){
n=(x*3)+4;
}
}
cout<<n<<endl;
return 0;
}
Когда ввожу 123 то он выводит 123 а не должен!

Вот сообственно текст задачи...
Дано число. В этом числе необходимо изменить одну цифру таким образом, чтобы
новое число делилось на 3 и было бы максимально возможным. В исходном числе нужно
обязательно изменить одну цифру, даже если исходное число уже делилось на 3.
Программа получает на вход одно длинное натуральное число. Длина числа может
достигать 100 цифр.
Программа должна вывести другое натуральное число, удовлетворяющее условиям:
1. Новое число должно отличаться от данного ровно одной цифрой.
2. Новое число должно делиться на 3.
3. Новое число должно быть максимально возможным из всех таких чисел.
Ринат Габбасов
Ринат Габбасов
222
Лучший ответ
в первом if-е ты прибавляешь 3, у тебя x=41 и n=126
дальше идёт второй if, x*3=123!=126
поэтому он выполняется и в нём получается опять n=x*3=123
тебе бы не пришлось задавать этот вопрос, если бы ты научился пользоваться отладчиком и прогнал программу по шагам

ну и в принципе решение неправильное, т. к. по логике для выполнения 3-го условия нужно как-то колупать старшие разряды, а у тебя походу только младший меняется
Андрей Шляжко
Андрей Шляжко
51 164
Неизвестно Неизвестно Я вот как раз не могу понять почему он выполняется во 2, там же стоит условие под которое число 123 не подходит под условие