Remove Duplicates

Remove Duplicates_第1张图片
Remove Duplicates_第2张图片

#include

int a[50], b[1001], c[50];
int main(void)
{
    int n, k;
    while(~scanf("%d", &n)){
        k = 0;
        for(int i = 0; i < 50; i++){  //初始化
            b[i] = 0;
            a[i] = 0;
        }
        for(int i = 0; i < n; i++){     //输入
            scanf("%d", &a[i]);
        }
        for(int i = n; i >= 0; i--){    //对出现的数字进行标记,储存
            if(b[a[i]] == 0){
                c[k] = a[i];
                k += 1;
                b[a[i]] = 1;
            }
        }
        k--;
        printf("%d\n", k);      //输出
        printf("%d", c[k]);
        for(int i = k-1; i > 0; i--){
            printf(" %d", c[i]);
        }
        printf("\n");
    }
    return 0;
}

思路
使用三个数组。
a储存数据,b储存每个数据的出现情况,c储存需要输出的数据。
并通过k来计算需要输出几个数据。
从后向前,若该数据未出现过,则存入c数组,k加1.
由于输出的是自右边开始第一个出现的数据,所以输出c时,也要从后往前输出。

注意
b数组通过下标来表示它所代表的数据,因此其数据范围是输入值的数据范围

你可能感兴趣的:(VJ)