描述

给定一个长度为n(n≤10000)的非递减序列a,删除其中所有的重复元素,得到一个严格单调递增序列。


格式

输入格式

输入数据为两行,第一行是整数n,第二行是n个整数组成的非递减序列

输出格式

输出去掉重复元素之后得到的严格单调递增序列


样例

输入样例

10
1 1 3 6 6 7 7 7 12 12

输出样例

1 3 6 7 12


限制

时间限制:500 ms
内存限制:32767 KB


代码:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #define Max 2000
  5. typedef struct
  6. {
  7. int* data;
  8. int lenth;
  9. int listsize;
  10. }SqList;
  11. void CreateList(SqList *L, int n, int* a)
  12. {
  13. L->data = (int*)malloc(Max * sizeof(int));
  14. L->listsize = Max;
  15. L->lenth = n;
  16. int j;
  17. for (j = 0; j < n; j++)
  18. {
  19. L->data[j] = a[j];
  20. }
  21. }
  22. void Traverse(SqList L)
  23. {
  24. int k;
  25. for (k = 0; k < L.lenth; k++)
  26. {
  27. if (k == 0)
  28. {
  29. printf("%d", L.data[k]);
  30. }
  31. else
  32. {
  33. printf(" %d", L.data[k]);
  34. }
  35. if (k == L.lenth - 1)
  36. {
  37. printf("\n");
  38. }
  39. }
  40. }
  41. void DeleteList(SqList La)
  42. {
  43. int i,k;
  44. int flag = 0;
  45. for (i = 0; i < La.lenth; ++i)//i用来遍历数组
  46. {
  47. if (flag == 1)
  48. {
  49. i = i - 1;
  50. flag = 0;
  51. }
  52. if (La.data[i] == La.data[i + 1])
  53. {
  54. for (k = i; k < La.lenth; k++)
  55. {
  56. La.data[k] = La.data[k + 1];
  57. }
  58. La.lenth--;
  59. flag = 1;
  60. }
  61. }
  62. Traverse(La);
  63. }
  64. void FreshList(SqList L1)
  65. {
  66. int i, j, temp;
  67. //冒泡排序算法:进行 n-1 轮比较
  68. for (i = 0; i < L1.lenth-1; i++)
  69. {
  70. //每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较
  71. for (j = 0; j < L1.lenth - 1 - i; j++)
  72. {
  73. if (L1.data[j] > L1.data[j + 1])
  74. {
  75. temp = L1.data[j];
  76. L1.data[j] = L1.data[j + 1];
  77. L1.data[j + 1] = temp;
  78. }
  79. }
  80. }
  81. }
  82. int main()
  83. {
  84. SqList L1;
  85. int n;
  86. int a[201];
  87. scanf("%d", &n);
  88. int i;
  89. for (i = 0; i < n; i++)
  90. {
  91. scanf("%d", &a[i]);
  92. }
  93. CreateList(&L1, n, a);
  94. FreshList(L1);
  95. DeleteList(L1);
  96. return 0;
  97. }