一、题目
先用计算机生成了n(1<=n<=100)个1到1000之间的随机整数,对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再把这些数从大到小排序。总结就是“去重”和“排序”的工作。
输入格式
共两行,第一行为一个正整数n.第二行有n个用空格隔开的正整数,为所产生的随机数。
输出格式
第一行输出一个正整数m,表示不相同随机数的个数,第二行输出m个用空格隔开的正整数,为从小到大排好序的不相同的随机数
样例输入输出
二、思路
本题总体考点就是排序和去重。排序我选择老生常谈的冒泡排序,算是重温了一遍,为旧知识点。
而去重对我而言是新的知识点。
去重的基本思路是创建另一个数组,将原先已经排好序的数组每一个元素进行前后比较,若相同,就不拷贝前一个元素到新的数组里面,若不相同,就将前面一个元素拷贝到新的数组里面,注意打印时需要将新的数组元素自加!
三、源码
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int main() { int n; int arr[105]; int count = 0; int replace[105]; cin >> n; for (int i = 0; i < n; i++) { cin >> arr[i]; } for (int m = 0; m < n; m++) { for (int j = 0; j < n - m; j++) { if (arr[j] < arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } }//回顾冒泡排序 //去重前一般需要先排序 /*for (int i=0;i<n;i++) {*/ /*if (arr[i] == arr[i + 1]) { replace[i] = arr[i]; i++; count++; }*/ //原先代码有问题,只考虑了重复两次的情况,若多余,三次重复或更多,就有问题 int q=0; for (int i=0;i<n;i++) { if (arr[i] == arr[i + 1]) { ; } else { replace[q++] = arr[i];//新数组自加 } } for (int i=0;i<q;i++) { cout << replace[i]<<' '; } return 0; }