Posted on 2011-09-22 00:26
kalvinyZhang 阅读(173)
评论(0) 编辑 收藏 引用 所属分类:
OJ
多说一句,虽然是水题,但是有个地方,真的学到了好多。就是从一个已经排序的数组中删除重复的数字。这里的算法比较烂,用的插入排序。这里输入的数据范围很大,要用到高效的排序方法。
这个题目的意思是,先输入要输入的数字,然后排序输出,其中输出的数组中不带重复的数字。下面是代码,算法没有优化。还有代码风格的问题,多用缩进和括号
#include <stdio.h>
#define MAX 1000
int main()
{
int n, i, j, tmp;
int s[MAX];
int t[MAX];
while (scanf("%d", &n) != EOF) {
for (i = 0; i < n; i++)
scanf("%d", &s[i]);
for (i = 0; i < n; i++) {
tmp = s[i];
for (j = i; j > 0 && tmp < s[j-1]; j--)
s[j] = s[j-1];
s[j] = tmp;
}
int k = 0;
t[k++] = s[0]; 这个地方是重点,开始k没有做加加运算,漏掉了开头或者最后的一个元素
for (i = 1; i < n; i++) {
if (s[i] != s[i-1])
t[k++] = s[i];
}
for (i = 0; i < k; i++)
printf("%d ", t[i]);
printf("\n");
}
return 0;
}