llf123456 发表于 2020-12-30 20:45:40

帮帮我吧

给定含有n个整数的序列,要求对这个序列进行去重操作。所谓去重,就是对于重复出现的数字,只保留第一次出现的位置,其它的都删除。输出不重复的序列。

函数接口定义:
在这里描述函数接口。
int deleteNode(int *p, int n);
在这里解释接口参数。例如:其中 p 指向的一维数组中有 n 个元素。

保留不重复的元素,将最后的不重复元素的数量,作为函数值返回

裁判测试程序样例:
#include <stdio.h>
#define N 20 //数组容量最大20

//p所指向的一维数组原有n个元素,保留不重复的元素。
//将最后的不重复元素的数量,作为函数值返回
int deleteNode(int *p, int n);

intmain()
{
    int i,n; //用户从键盘输入的一个整数n,位于1到20之间。
    int a;
    int iLenAfter; //去重复后,还剩下的元素数量

    scanf("%d",&n);
    for(i=0; i<n; i++) scanf("%d" ,&a);

    iLenAfter = deleteNode(a,n);
    for(i=0;i<iLenAfter;i++)
      printf("%d ",a); //每个元素后有一个空格
}


/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:

6
6 1 0 5 0 0
输出样例:
6 1 0 5

一世轻尘 发表于 2020-12-30 20:48:17

好家伙,和我们期末考试题差不多,不过我们那个是在求并集里面包含去重操作的{:10_264:}

jackz007 发表于 2020-12-30 22:14:20

本帖最后由 jackz007 于 2020-12-31 01:07 编辑

#include <stdio.h>

#define N 20 //数组容量最大20

int deleteNode(int * p , int n)
{
      int i , j , k                                                         ;
      for(i = 0 ; i < n- 1 ; i ++) {
                for(j = n - 1 ; j > i ; j --) {
                        if(p == p) {
                              for(k = j ; k < n - 1 ; k ++) p = p ;
                              n --                                          ;
                        }
                }
      }      
      return n                                                            ;
}

intmain()
{
    int i,n; //用户从键盘输入的一个整数n,位于1到20之间。
    int a;
    int iLenAfter; //去重复后,还剩下的元素数量

    scanf("%d",&n);
    for(i=0; i<n; i++) scanf("%d" , & a) ;

    iLenAfter = deleteNode(a , n)         ;
    for(i=0;i<iLenAfter;i++)
      printf("%d ",a); //每个元素后有一个空格
}
      编译、运行实况
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
6
6 1 0 5 0 0
6 1 0 5
D:\00.Excise\C>

D:\00.Excise\C>x
20
1 9 3 7 5 4 3 9 6 5 2 8 7 0 9 2 3 5 7 9 8 1 0 1 2 3 5 0 9 2
1 9 3 7 5 4 6 2 8 0
D:\00.Excise\C>
页: [1]
查看完整版本: 帮帮我吧