小哼买书(明明的随机数通用)

大家好!我是啊哈磊的小粉粉

(在 there,我就 not 报上真名啦)
插一句哈,
蒟蒻第一次写题解,鼓励一下,点个赞再看呗?

今天呢,蒟蒻在啊哈星球上边看到了一个很棒滴题目,

在这里先与大家分享分享:

直上题目:

12001.小哼买书

小哼的学校要建立一个图书角,老师派小哼去找一些同学做调查,看看同学们都喜欢读哪些书。小哼让每个同学写出一个自己最想读的书的ISBN号(你知道吗?每本书都有唯一的ISBN号,不信话你去找本书翻到背面看看)。当然有一些好书会有很多同学都喜欢,这样就会收集到很多重复的ISBN号。小哼需要去掉其中重复的ISBN号,即每个ISBN号只保留一个,也就说同样的书只买一本(学校真是够抠门的)。然后再把这些ISBN号从小到大排序,小哼将按照排序好的ISBN号去书店去买书。请你协助小哼完成“去重”与“排序”的工作。

输入格式:

输入有2行,第1行为一个正整数,表示有n个同学参与调查(n<=100)。第2行有n个用空格隔开的正整数,为每本图书的ISBN号(假设图书的ISBN号在1~1000之间)。

输出格式:

输出也是2行,第1行为一个正整数k,表示需要买多少本书。第2行为k个用空格隔开的正整数,为从小到大已排好序的需要购买的图书ISBN号。

限制:

每个测试点1秒
样例 1 :

输入:
10
20 40 32 67 40 20 89 300 400 15

输出:
8
15 20 32 40 67 89 300 400

我的理解:

首先,这一道题其实是由 全国青少年信息学奥林匹克联赛(NOIP2006)普及组第一题《明明的随机数》 改编的,

当我们看到题目中的 “只能买一种” 就很容易可以想到

如果这句话伤害到了你 ,我表示深深地歉意)

适合用桶排序来做 (“桶排序”如果不懂的可以查阅一下)

再看看数据,1000是完全够的,所以放心做吧,

但一定要记得,这一道题的编码相同的只需要输出一次就够了,所以就算有多个相同的也应该只输出一次,
(具体怎样看看代码吧)

来吧!直击code!

#include<stdio.h>
//用桶排序实现
int main() {
    int a[1001];
    int i;
    int n;//ISBN号总数
    int k=0;//去重后的ISBN号总数 
    int isbn;//用来暂存isbn号,约定 
    for(i=0;i<=1000;i++) {
        a[i]=0;
    } 
//    printf("输入ISBN号总数\n");
    scanf("%d",&n);
//    printf("输入%d个ISBN号,中间用空格隔开\n",n);
    for(i=1;i<=n;i++) {
        scanf("%d",&isbn);
//        a[isbn]++;//效果一样 
        a[isbn]=1;
    }
//    printf("去重并从小到大排序的ISBN号如下:\n");
    for(i=1;i<=1000;i++) {
        if(a[i]!=0) {
            k++;
        }
    }
    printf("%d\n",k);
    for(i=1;i<=1000;i++) {
        if(a[i]!=0) {
            printf("%d ",i);
        }
    }
    printf("\n");
    return 0;
}

既然已经看到这了,不如点个赞再走吧!

原创文章 3 获赞 4 访问量 318

猜你喜欢

转载自blog.csdn.net/Tonvia/article/details/105394352
今日推荐