题目描述: 输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。

输入描述: 输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。

输出描述: 输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。

方法①

#include <stdio.h>
//欠考虑的法一,会将该输入进行递增排序后输出,不会保留输入的顺序,还是需要重新优化的,看法二
int main()
{
    int n = 0;
    int arr[5001] = {0};
    int i = 0;
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        //进行整数的存储
        int tmp = 0;
        scanf("%d",&tmp);
        if( arr[tmp] == 0 )
            arr[tmp]=1;
    }
    for(i=0; i<5001; i++)
    {
        if(arr[i] == 1)
            printf("%d ",i);
    }
    return 0;
}

## 基础循环的方法二呀


 //法二:此方法可能复杂度会过大,如要进一步优化,则可以参考方法三使用两个数组,在输入的时候便和输出数组进行对比!
int main()
{
    int n = 0;
    int arr[1000];//用于存储元素
    scanf("%d",&n);
    int i = 0;
    //输入
    for(i=0; i<n; i++)
    {
        scanf("%d",&arr[i]);
    }
    //去重
    for(i=0; i<n; i++)
    {
        //判断下标为i的元素 arr[i] 是否在后面位置出现
        int j = 0;
        for(j=i+1; j<n; j++)
        {
            if(arr[i] == arr[j])
            {
                //去重
                //将j+1的位置的元素全部向前移动一位!
                int k = 0;
                for(k=j; k<n-1; k++)//将k的范围最大固定到n-1,防止其越界访问
                {
                    arr[k]=arr[k+1];
                }
                n--;
                j--;//为了避免j跳过元素,需要--
            }
             
        }
    }
    //输出
    for(i=0; i<n; i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

##还不错的方法三呀!

方法③

int main()
{
    int n; 
    //第一行包含一个正整数n(1 ≤ n ≤ 1000)
    int arr1[1000]={0}; //作为输入数组存储信息
    int arr2[1000]={0}; //作为输出数组用于筛选去重后的数字
    scanf("%d",&n);
    int num=0;//用于统计去重后元素的个数
    for(int i=0;i<n;i++){
        int sum=0;//用于表示该元素是否为重复元素
        scanf("%d ",&arr1[i]);//输入数组①
        for(int j=0;j<i;j++){
            if(arr2[j]==arr1[i]){ //检测输出数组②中是否已经存在此数
                sum=1;
                break;
            }
        }
        //sum=0说明if循环未进入则输出数组中无此数
        //将满足的值输入二数组
        if(sum==0)
        {   //说明此时为非重复元素
            arr2[num]=arr1[i];//将该元素存储到arr2输出数组中
                 num++;//个数++
        }
    }
    for(int i=0;i<num;i++){ //输出去重后的数组
        printf("%d ",arr2[i]);
    }
    return 0;
}