集合纯净化,关于数组与子函数调用的问题

设a是一个整型数组,x是一个整数,编写一个子函数将数组a的元素与x相同的元素删除到只剩下一个。

找到第一个x的值不删除,剩下的到x的值都删除即可
你题目的解答代码如下:

#include <iostream>
using namespace std;

int fun(int a[],int n,int x) {
    int i,m=0,f=0;
    for (i = 0; i < n; i++)
    {
        if (a[i]==x)
        {
            f++;
            if (f==1)
               a[m++] = a[i];
        }
        else
            a[m++] = a[i];
    }
    return m;
}
int main(void) {
    int a[] = {3,5,5,7,4,6,5,5};
    int i,x,n = sizeof(a) / sizeof(int);
    cin >> x;
    n = fun(a,n,x);
    for (i = 0; i < n; i++)
    {
        cout << a[i] << " ";
    }
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img


#include <iostream>
 
int fun(int isource[],int itarget,int iArr) {
    int m=0,n=0,iTargetNumb = 0, x=0;
    
    for(m=0;m < iArr;m++)
    {
        if(isource[m] == itarget)
        {
            n++;
        }
    }
    
    iTargetNumb = n;
    
    while(n>1) 
    {
        for(m=0;m<iArr-x;m++)
        {
                if(isource[m] == itarget)  
                {
                     for (int j = m ; j < iArr - (x+1); j ++)
                     {
                        isource[j] = isource[j + 1];     
                     }
                     n--;
                     x++;
                     break;
                }
        }
    }
    return iArr - iTargetNumb + 1;
}
int main(void) {
    int isource[] = {7,1,4,2,6,20,15,3,8,5,9,19,11,2,16,17,14,2,13,10}; 
    int itarget = 2;
    int i,j,iArr = sizeof(isource) / sizeof(int);
  
    j = fun(isource,itarget,iArr);
    for (i = 0; i < j; i++)
    {
        printf("%d ",isource[i]);
    }
    return 0;
}

运行结果
7 1 4 6 20 15 3 8 5 9 19 11 16 17 14 2 13 10

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632