输入一个有n个元素的数组,将这个数组中的重复的元素去掉,使用指针的方法

1个月前

https://m.teaku.com/20/1581674203615682.html

网友评论

  • 这个题我用指针,并用malloc动态分配数组的内存完成的,通过对数组遍历,从而解决。下面是程序及注释:

    #include <stdio.h>

    #include <malloc.h>

    int main()

    {

       int n;//定义一个变量,记录数组的长度

       char *a;//利用指针完成本题

       scanf("%d", &n);

       a = (char*)malloc(sizeof(char)*n);//使用malloc动态分配数组的内存

       for (int i = 0; i < n; i++)

       {

         scanf("%c", &a[i]);

       }

       //使用两层for循环嵌套,对数组遍历:

       for (int i = 0; i < n - 1; i++)

       {

          for (int j = i + 1; j < n; )/*注意:此时第三个表达式空出,因为当找到重复的数据,后面的数往前覆盖之后,应该再进行一次对比*/

          {

             if (a[i] == a[j])//判断如果出现相同数据,则将后面的数据往前移一位

              {

                for (int k = j; k <n - 1; k++)

                  {

                    a[k] = a[k + 1];

                  }

                n--;//记录数组长度的变量相应减1

              }else{

                j++;//当没有重复的时候才++

              }

           }

        }

       for (int i = 0; i < n; i++)//打印数组

       {

         printf("%c", a[i]);

       }

       free(a);//释放申请的内存

       return 0;

    }

    这个程序没有问题,下面是运行结果图

    还有问题吗,谢谢采纳,Thanks♪(・ω・)ノ

  • int v,a;

    const int n=v;

    int b[10000]{0}/*桶*/,c[10000]{0};

    for (int i=0;i<10000;i++){

        cin>>a;

        b[a]=1;

    }//桶排序

    for (int i=0,s=0;i<10000;i++)

         if (b[i]==1)c[s]=b[i],s++;