[洛谷题解]P1059 明明的随机数「v1.0」
程序员文章站
2022-03-15 15:13:31
㊀题目...
㊀题目
题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了NN个11到10001000之间的随机整数(N≤100)(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入格式
输入有两行,第11行为11个正整数,表示所生成的随机数的个数NN
第22行有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 代码证明
3 声明
请合理使用本文章中的代码,仅供学习使用,一切所造成后果本人概不负责。
代码欢迎在不篡改的情况下*传播,一经更改,传播及需要作者的许可。
最后,感谢读者们的支持
本文地址:https://blog.csdn.net/m0_48809769/article/details/107325488
上一篇: 清空数据库的表