У меня есть следующий код:
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
Я использую ту же логику обмена значениями. Что я делаю не так?
Спасибо!
Вы получаете результат согласно тому, что вы написали. Правильной логикой для вращения в этом случае будет: -
int temp;
int *aPtr = &a, *bPtr = &b, *cPtr = &c;
int *tempPtr = &temp;
*tempPtr = *cPtr;
*cPtr = *bPtr;
*bPtr = *aPtr;
*aPtr = *tempPtr;
Просто продолжайте последовательно. Как и первое значение хранилища c, сдвиньте a и b, а затем восстановите так, чтобы вам было легко обобщить это.
Вы вращаете числа слева, в то время как вам нужно повернуть цифры вправо. Поэтому, когда вы поворачиваете влево, вам нужно сохранить значение a, потому что оно будет первым, которое будет перезаписано. Если вы хотите повернуть вправо, вы должны сохранить значение c, потому что оно будет первым, которое будет перезаписано.
Поэтому вам нужно написать
*tempPtr = *cPtr;
*cPtr = *bPtr;
*bPtr = *aPtr;
*aPtr = *tempPtr;