蓝桥杯今日份练习
发布时间:2022-12-28 11:37:14 366 相关标签: # ios
一、题目
先用计算机生成了n(1<=n<=100)个1到1000之间的随机整数,对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再把这些数从大到小排序。总结就是“去重”和“排序”的工作。
输入格式
共两行,第一行为一个正整数n.第二行有n个用空格隔开的正整数,为所产生的随机数。
输出格式
第一行输出一个正整数m,表示不相同随机数的个数,第二行输出m个用空格隔开的正整数,为从小到大排好序的不相同的随机数
样例输入输出

二、思路
本题总体考点就是排序和去重。排序我选择老生常谈的冒泡排序,算是重温了一遍,为旧知识点。
而去重对我而言是新的知识点。
去重的基本思路是创建另一个数组,将原先已经排好序的数组每一个元素进行前后比较,若相同,就不拷贝前一个元素到新的数组里面,若不相同,就将前面一个元素拷贝到新的数组里面,注意打印时需要将新的数组元素自加!
三、源码
#define _CRT_SECURE_NO_WARNINGS 1
#include
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 {*/
/*if (arr[i] == arr[i + 1])
{
replace[i] = arr[i];
i++;
count++;
}*/
//原先代码有问题,只考虑了重复两次的情况,若多余,三次重复或更多,就有问题
int q=0;
for (int i=0;i {
if (arr[i] == arr[i + 1])
{
;
}
else
{
replace[q++] = arr[i];//新数组自加
}
}
for (int i=0;i {
cout << replace[i]<<' ';
}
return 0;
}
文章来源: https://blog.51cto.com/u_15740457/5960154
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报