交换两个变量的值而不使用第三个数组

时间:2015-08-16 06:10:10

标签: c++ swap

我正在编写一个程序,它接受用户输入以确定用户输入的所有对的数字对和交换值。

例如:

用户想要输入3对,然后输入3,然后输入对:

3 1 2 3 4 5 6

输出:

2 1 4 3 6 5

我的程序正在提供正确的输出,但不是一次性取出所有对,而是逐个接受它们并给出输出。我有一个模糊的想法,这可以通过使用数组解决,但不知道如何解决。请帮忙。

这是我的代码:

#include <stdio.h>
int main()
{
    int x, y, p, i;
   //int a [100], b[100];
    printf ("How many pairs?\n");
    scanf ("%d", &p);
    for(i=1; i<=p; i++)
    {
       printf ("Enter two values:\n");
       scanf("%d %d",&x,&y);

       x = x + y;  
       y = x - y;  
       x = x - y;
      //a[i]=x;
      //b[i]=y;



      printf("\n");
      printf("After Swapping: x = %d, y = %d\n", x, y);
     }

     return 0;
}

目前输出如下:

多少对? 2

输入两个值: 2 3

交换x = 3和y = 2

之后

输入两个值: 4 5

交换x = 5和y = 4之后。我希望它将所有4个值放在一起并显示输出。

1 个答案:

答案 0 :(得分:0)

由于您添加了C ++标记,我建议使用简单的STL解决方案:

#include <iostream>
#include <vector>

int main(){
  std::vector<std::pair<int,int>> Vec;
  std::pair<int,int> Pr;
  int n;
  std::cin>>n;  //no. of pairs

  while(n--){
    std::cin>>Pr.second>>Pr.first;  //pair of elements stored in swapped locations
    Vec.push_back(Pr);
  }

  for(auto element : Vec){
    std::cout<<element.first<<" "<<element.second<<" ";
  }
  return 0;
}