欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

[洛谷题解]P1059 明明的随机数「v1.0」

程序员文章站 2022-03-15 15:13:31
㊀题目...

㊀题目

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了NN个11到10001000之间的随机整数(N100)(N100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入格式

输入有两行,第11行为11个正整数,表示所生成的随机数的个数NN22行有NN个用空格隔开的正整数,为所产生的随机数。

输出格式

输出也是两行,第11行为11个正整数MM,表示不相同的随机数的个数。

第22行为MM个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

输入输出样例

输入 #1
10
20 40 32 67 40 20 89 300 400 15
输出 #1
8
15 20 32 40 67 89 300 400

㊁讲解

1 排序

首先,现将这些数字排序。这里直接使用c++库函数sort即可。

2 去重

这是本题的难点,但作者用了一个简单的方法,即 如果后面那个数与它前面那个数相等,则不打印

㊂代码展示

#include <cstdio>
#include <algorithm>

int print( int n, int m[] )
{
    int i=0;
    int n1 = n;
    while( i<n )
    {
        if ( m[i] == m[i+1] )
            n1--;
        i++;
    }

    printf( "%d\n", n1 );
    i = 0;
    while( i<n )
    {
        if ( m[i] == m[i+1] ) i++;
        else printf("%d ",m[i]), i++;
    }

}

int game()
{
    int n;
    scanf( "%d", &n );

    int nums[n];
    int i = 0;
    while( i < n )
    {
        scanf( "%d", &nums[i] );
        i++;
    }
    sort( nums, nums + n );
    i = 0;

    print ( n, nums );
}

int main ()
{
    game();
    return 0;
}

㊃其他

1 更新

作者会持续更新,敬请期待

2 代码证明

[洛谷题解]P1059 明明的随机数「v1.0」

3 声明

请合理使用本文章中的代码,仅供学习使用,一切所造成后果本人概不负责。
代码欢迎在不篡改的情况下*传播,一经更改,传播及需要作者的许可。

最后,感谢读者们的支持

本文地址:https://blog.csdn.net/m0_48809769/article/details/107325488