Вращение значений между 3 переменными с использованием указателя в C ++

0

У меня есть следующий код:

int main(){
    int a,b,c;
    cout<<"Enter a: ";
    cin>>a;
    cout<<"Enter b: ";
    cin>>b;
    cout<<"Enter c: ";
    cin>>c;
    int temp;
    int *aPtr = &a, *bPtr = &b, *cPtr = &c;
    int *tempPtr = &temp;
    *tempPtr = *aPtr;
    *aPtr = *bPtr;
    *bPtr = *cPtr;
    *cPtr = *tempPtr;
    cout<<a<<b<<c<<"\n";
    system("pause");
    return 0;
}

Входные данные :

2 3 4

Вывод

3 4 2

Ожидаемый результат

4 2 3

Я использую ту же логику обмена значениями. Что я делаю не так?

Спасибо!

Теги:
swap

2 ответа

4
Лучший ответ

Вы получаете результат согласно тому, что вы написали. Правильной логикой для вращения в этом случае будет: -

int temp;
int *aPtr = &a, *bPtr = &b, *cPtr = &c;
int *tempPtr = &temp;
*tempPtr = *cPtr;
*cPtr = *bPtr;
*bPtr = *aPtr;
*aPtr = *tempPtr;

Просто продолжайте последовательно. Как и первое значение хранилища c, сдвиньте a и b, а затем восстановите так, чтобы вам было легко обобщить это.

  • 0
    Какая моя линия неверна?
  • 0
    Вы только что получили заказ назад - сравните код в ответе выше с вашим кодом.
Показать ещё 4 комментария
0

Вы вращаете числа слева, в то время как вам нужно повернуть цифры вправо. Поэтому, когда вы поворачиваете влево, вам нужно сохранить значение a, потому что оно будет первым, которое будет перезаписано. Если вы хотите повернуть вправо, вы должны сохранить значение c, потому что оно будет первым, которое будет перезаписано.

Поэтому вам нужно написать

*tempPtr = *cPtr;
*cPtr = *bPtr;
*bPtr = *aPtr;
*aPtr = *tempPtr;
  • 0
    Это даст мне 342 вместо 423
  • 0
    @ Набин Вы ошибаетесь. Проверьте еще один.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню