Remove Duplicates


#include<stdio.h>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数组通过下标来表示它所代表的数据,因此其数据范围是输入值的数据范围

本文链接:https://my.lmcjl.com/post/11455.html

展开阅读全文

4 评论

留下您的评论.