一个整型数组有 N个元素,c++编写一函数实现删除数组中所有两个值相加为的10 元素。

例如原数组为{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;
}