Problem 1064 - What Is Left

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;
}

posts - 0, comments - 0, trackbacks - 0, articles - 9

Copyright © kalvinyZhang