例如原数组为{1,3,8,2,2,9,7,7},输出的数组则为{2,7}。要求用值传递和指针传递2种方式实现。
#include <iostream>
using namespace std;
int fun(int *a, int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; j < n; j++)
{
if (a[i] + a[j] == 10)
{
for (int k = j; k < n - 1; k++) // j后面元素前移
a[k] = a[k + 1];
n--;
for (int k = i; k < n - 1; k++) // i后面元素前移
a[k] = a[k + 1];
n--;
i--; // 重新从i处查找
break;
}
}
}
return n;
}
void fun2(int *a, int *n)
{
for (int i = 0; i < *n - 1; i++)
{
for (int j = i + 1; j < *n; j++)
{
if (a[i] + a[j] == 10)
{
for (int k = j; k < *n - 1; k++) // j后面元素前移
a[k] = a[k + 1];
(*n)--;
for (int k = i; k < *n - 1; k++) // i后面元素前移
a[k] = a[k + 1];
(*n)--;
i--; // 重新从i处查找
break;
}
}
}
}
/* fun2简写
void fun2(int *a, int *n)
{
*n = fun(a, *n);
}
//*/
int main()
{
int n = 8;
int a[] = {1, 3, 8, 2, 2, 9, 7, 7};
int b[] = {1, 3, 8, 2, 2, 9, 7, 7};
n = fun(a, n);
for (int i = 0; i < n; i++)
cout << a[i] << " ";
cout << endl;
n = 8;
fun2(b, &n);
for (int i = 0; i < n; i++)
cout << a[i] << " ";
return 0;
}