在不使用第三个数组的情况下交换两个变量的值

Swapping values of two variables without using a third one- Array

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

例如:

用户想输入 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 个值放在一起并显示输出。

我想,你正在寻找这样的东西(你只需要一个数组;你可以直接以交换顺序存储值):

for(i=0; i<p; i++) {
    scanf("%d %d",&x,&y);
    a[2*i+1]=x;
    a[2*i]=y;
}
for(i=0; i<2*p; i++) {
    printf("%d ", a[i]);
}
printf("\n");

您可以将它们存储在一个数组中(就像您在一些注释代码中尝试的那样),然后一个一个地交换它们。

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

     return 0;
}

在这里试试:http://goo.gl/5JJ7i3

我假设您正在使用 C,所以我只使用了 C headers。一种方法是首先找出有多少对,根据需要动态分配 space,用输入整数填充数组,交换它们,然后打印它们。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("Enter numbers: ");

    /* Get the number of pairs. */
    int prs;
    scanf_s("%i",&prs);

    /* Create a dynamic array. */
    prs*=2;
    int *A = (int*) malloc(prs*sizeof(int));

    /* Read the integers into the array. */
    int i=0;
    for(;i!=prs;scanf_s("%i",&A[i++]));

    /* Swap. */
    int j=0;
    for(;j!=prs;j+=2)
    {
        int tmp = A[j];
        A[j] = A[j+1];
        A[j+1] = tmp;
    }

    /* Print. */
    for(i=0;i!=j;printf("%i ",A[i++]));
    printf("\n");
}

干杯!如果您真的想变得更好,请尝试 this 这本书。

既然你已经添加了 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;
}