问题描述:
将数组A中的内容和数组B中的内容进行交换。(数组一样大)
问题分析:
数组内容交换实质上与两个数进行交换一样,方法可以用很多种,这里我只用两种办法来解决这类问题,其他方法可参考之前写的博客,这里将链接附上:
https://blog.csdn.net/lexiaoyao_0000/article/details/90116017
方法一:采用中间变量法
tmp = a[i];
a[i] = b[i];
b[i] = a[i];
方法二:采用异或法(不使用中间变量)
a[i] ^=b[i];
b[i] ^= a[i];
a[i] ^= b[i];
源代码:
方法一:中间变量法
#include <stdio.h>
#include <windows.h>
int main()//中间变量法
{
int i = 0;
int j = 0;
int a[5] = { 1, 2, 3, 4, 5 };
int b[5] = { 6, 7, 8, 9, 0 };
printf("交换前a[5]:\n");
for (i; i < 5; i++)//交换前
{
printf("%d ", a[i]);
}
printf("\n");
printf("交换前b[5]:\n");
for (j; j < 5; j++)
{
printf("%d ", b[j]);
}
printf("\n");
for (i = 0; i < 5; i++)//交换中
{
int tmp = a[i];
a[i] = b[i];
b[i] = tmp;
}
printf("交换后a[5]:\n");
for (i=0; i < 5; i++)//交换后
{
printf("%d ", a[i]);
}
printf("\n");
printf("交换后b[5]:\n");
for (j=0; j < 5; j++)
{
printf("%d ", b[j]);
}
printf("\n");
system("pause");
return 0;
}
方法二:异或法
#include <stdio.h>
#include <windows.h>
int main()//异或法
{
int i = 0;
int j = 0;
int a[5] = { 1, 2, 3, 4, 5 };
int b[5] = { 6, 7, 8, 9, 0 };
printf("交换前a[5]:\n");
for (i; i < 5; i++)//交换前
{
printf("%d ", a[i]);
}
printf("\n");
printf("交换前b[5]:\n");
for (j; j < 5; j++)
{
printf("%d ", b[j]);
}
printf("\n");
for (i = 0; i < 5; i++)//交换中
{
a[i] ^= b[i];
b[i] ^= a[i];
a[i] ^= b[i];
}
printf("交换后a[5]:\n");
for (i=0; i < 5; i++)//交换后
{
printf("%d ", a[i]);
}
printf("\n");
printf("交换后b[5]:\n");
for (j=0; j < 5; j++)
{
printf("%d ", b[j]);
}
printf("\n");
system("pause");
return 0;
}
别看代码很长,只是为了格式好看,核心代码只有“交换中”那几行代码。