描述
给定一个长度为n(n≤10000)的非递减序列a,删除其中所有的重复元素,得到一个严格单调递增序列。
格式
输入格式
输入数据为两行,第一行是整数n,第二行是n个整数组成的非递减序列
输出格式
输出去掉重复元素之后得到的严格单调递增序列
样例
输入样例
输出样例
1 3 6 7 12
限制
时间限制:500 ms
内存限制:32767 KB
代码:
#include<stdio.h>#include<stdlib.h>#include<string.h>#define Max 2000typedef struct{int* data;int lenth;int listsize;}SqList;void CreateList(SqList *L, int n, int* a){L->data = (int*)malloc(Max * sizeof(int));L->listsize = Max;L->lenth = n;int j;for (j = 0; j < n; j++){L->data[j] = a[j];}}void Traverse(SqList L){int k;for (k = 0; k < L.lenth; k++){if (k == 0){printf("%d", L.data[k]);}else{printf(" %d", L.data[k]);}if (k == L.lenth - 1){printf("\n");}}}void DeleteList(SqList La){int i,k;int flag = 0;for (i = 0; i < La.lenth; ++i)//i用来遍历数组{if (flag == 1){i = i - 1;flag = 0;}if (La.data[i] == La.data[i + 1]){for (k = i; k < La.lenth; k++){La.data[k] = La.data[k + 1];}La.lenth--;flag = 1;}}Traverse(La);}void FreshList(SqList L1){int i, j, temp;//冒泡排序算法:进行 n-1 轮比较for (i = 0; i < L1.lenth-1; i++){//每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较for (j = 0; j < L1.lenth - 1 - i; j++){if (L1.data[j] > L1.data[j + 1]){temp = L1.data[j];L1.data[j] = L1.data[j + 1];L1.data[j + 1] = temp;}}}}int main(){SqList L1;int n;int a[201];scanf("%d", &n);int i;for (i = 0; i < n; i++){scanf("%d", &a[i]);}CreateList(&L1, n, a);FreshList(L1);DeleteList(L1);return 0;}
