【问题标题】:I want that vector_total dont have any repeated number我希望 vector_total 没有任何重复的数字
【发布时间】:2016-08-20 23:08:52
【问题描述】:

我需要 vector_total 没有任何重复的数字。

main() 中声明的入口 vector1 和 vector2 的函数。

void entrada_vectors(int vector1[], int vector2[], int vector_total[], int *n, int *m)
{     
    int i=0, j=0;

    /*Entrarem els nombres del vector 1 primer */

    for (i=0; i<*n; i++)
     {
           vector_total[i]=vector1[i];
     }

    /*Entrarem els nombres del vector 2 després */

    for (i=*n; i<*n+*m; i++)
    {
        if (j<*m)
        {
         vector_total[i]=vector2[j];
        j++;
        }
    }
}   

函数2.这是vector_total中的订单号。

void ordena(int vector_total[], int *n, int *m)
{   
    int i=0, j=0;
    int aux=0;

 for (i=0; i<*n+*m-1; i++)
 {
    for (j=0; j<*n+*m-1; j++)
    {
        if (vector_total[j]>vector_total[j+1])
        {   
            aux=vector_total[j];
            vector_total[j]=vector_total[j+1];
            vector_total[j+1]=aux;
            aux=0;
        }
    }
 }
}

函数3.打印vector_total

void mostra(int vector_total[], int *n, int *m )
{   int i;

    for (i=0; i<*n+*m; i++)
    {
        printf ("Pos %d del vector: %d\n", i, vector_total[i] );
    }
}

函数 4. 问题出在这里!此函数用于清理我的 vector_total 并删除重复的数字。

void limpiar_repetidos(int vector_total[], int *n, int *m)
{
    int x=0, i=0, j=0;

        for (i=0; i<*n+*m-1; i++)
        {
            for (j=0; j<*n+*m-1; j++)
            {
                if (vector_total[j]==vector_total[j+1])
                {   
                        x=j+1;
                        for (i=*n+*m; i>x; i--)
                        {
                            vector_total[i-1]=vector_total[i];

                        }
                }
            }
        }
}

这是我的主要内容。还有我的声明变量:

int vector1[]={7,1,5,3,4,2};

int vector2[]={3,7,3,0,9,10};

int n=sizeof(vector1)/sizeof(vector1[0]);

int m=sizeof(vector2)/sizeof(vector2[0]);

int vector_total[n+m];

main()

{ entrada_vectors(vector1, vector2, vector_total, &n, &m);

ordena(vector_total, &n, &m);

mostra(vector_total, &n, &m);

limpiar_repetidos(vector_total, &n, &m);
printf ("==================\n");

mostra(vector_total, &n, &m);

返回 0; }

谢谢大家! :)

【问题讨论】:

    标签: c arrays


    【解决方案1】:

    1) 如果函数只处理一个 vector_total ,则 vector_total 的长度最好通过一个参数传递。如果它不会改变,你也不需要指针传递。

    void mostra(int vector_total[], int len){
        int i;
    
        for (i=0; i<len; i++) {
            printf ("Pos %d del vector: %d\n", i, vector_total[i] );
        }
    }
    

    2) 删除元素后,函数需要一个新的长度。还有,删除相邻的相同元素也可以这样。

    int limpiar_repetidos(int vector_total[], int len){//int *n, int *m --> int len
        int i, size, new_size;
    
        size = len;
        for(i = new_size = 1; i < size; ++i){
            if(vector_total[new_size-1] != vector_total[i])
                vector_total[new_size++] = vector_total[i];
        }
        return new_size;
    }
    

    使用示例

    mostra(vector_total, m + n);
    
    int l = limpiar_repetidos(vector_total, n + m);
    
    mostra(vector_total, l);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2016-08-17
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多