欢迎光临散文网 会员登陆 & 注册

《编程思维与实践》1028.排序去重

2023-04-07 23:12 作者:风浅叶墨  | 我要投稿

题目

思路

法一(最方便):直接将所有数据进行排序,相同数据则会排在相邻位置,控制输出保证不输出相同数据即可.

法二(桶排序):桶排序就是将数组分到有限数量的桶里再对每个桶进行个别排序.在这题中注意到数据最大只有1000,只需要开大小为1001的数组,之后将出现的数字数组存为1,不出现存0,输出时顺序或逆序输出不为0的数组对应的数字即可.

注意的点:

一组数据的输入可以直接用EOF来判断输入是否结束,如果是多组数据则需要分割字符串.

代码

法一:

#include<stdio.h>
#include<stdlib.h>

int cmp1(const void *a,const void *b)
{
    int *m=(int*)a;
    int *n=(int*)b;
    return *m-*n;               //升序 
}

int cmp2(const void *a,const void *b)
{
    int *m=(int*)a;
    int *n=(int*)b;
    return *n-*m;                       //降序 
}

int main()
{
    char judge;
    judge=getchar();
    int number[100];
    int i=0;
    while(scanf("%d",&number[i])!=EOF)    //EOF判断一组数据输入结束
    {
        i++;
    }
    if(judge=='A')
    {
        qsort(number,i,sizeof(int),cmp1);  
    }
    if(judge=='D')
    {
        qsort(number,i,sizeof(int),cmp2);
    }
    for(int j=0;j<i;j++)
    {
        printf("%d ",number[j]);
        while(number[j]==number[j+1])  //相同只输出一个
        { 
            j++;
        }
    }
    return 0
}

法二:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    char judge;
    judge=getchar();
    int tab[1001]={0};
    int number;
    while(scanf("%d",&number)!=EOF)    //EOF判断一组数据输入结束
    {
        if(tab[number]==0)
        {
            tab[number]=1;
        }
    }
    if(judge=='A')
    {
        for(int j=0;j<1001;j++)
        {
            if(tab[j]==1)
            {
                printf("%d ",j);
            }
        } 
    }
    if(judge=='D')
    {
        for(int j=1000;j>=0;j--)
        {
            if(tab[j]==1)
            {
                printf("%d ",j);
            }
        } 
    }
    return 0
}


《编程思维与实践》1028.排序去重的评论 (共 条)

分享到微博请遵守国家法律