C++信息学奥赛1184:明明的随机数

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;  // 数组长度
    cin >> n;  // 输入数组长度
    int arr[n];  // 定义整数数组,用于存储输入的整数

    // 输入数组元素
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }

    int e = 0;  // 计数器,记录重复元素个数

    // 去重
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (i != j && arr[i] == arr[j])  // 如果存在不同下标 i 和 j,且元素相等
            {
                arr[j] = 0;  // 将重复的元素置为 0
                if (arr[i] != 0)
                {
                    e++;  // 计数器加一
                }
            }
        }
    }

    // 升序排序
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (arr[i] < arr[j])  // 如果前一个元素小于后一个元素
            {
                swap(arr[i], arr[j]);  // 交换元素位置
            }
        }
    }

    cout << n - e << endl;  // 输出去重后数组的长度

    // 输出去重后的升序数组
    for (int i = 0; i < n; i++)
    {
        if (arr[i] != 0)  // 输出非零元素
        {
            cout << arr[i] << " ";
        }
    }
}

代码逻辑如下:

  1. 输入一个整数 n,表示数组的长度。
  2. 创建一个名为 arr 的整数数组,用于存储输入的整数。
  3. 通过循环读取 n 个整数,将其存储到数组 arr 中。
  4. 使用两层循环遍历数组 arr,如果存在两个不同的下标 i 和 j 且 arr[i] == arr[j],则将 arr[j] 置为 0,并增加计数器 e 的值。
  5. 再次使用两层循环对数组 arr 进行冒泡排序,将较大的数向后移动。
  6. 输出去重后数组的长度 n - e。
  7. 遍历数组 arr,输出非零元素。
相关推荐
编程大师哥4 分钟前
JavaScript 和 Python 哪个更适合初学者?
开发语言·javascript·python
万象.5 分钟前
redis客户端安装与实现C++版本
数据库·c++·redis
建军啊14 分钟前
php伪协议、代码审计工具和实战
开发语言·php
WYH28719 分钟前
为什么在cubeide里勾选了can1,生成的工程里没有can.c?
c语言·开发语言
22 分钟前
java关于键盘录入
java·开发语言
马猴烧酒.24 分钟前
JAVA后端对象存储( 图片分享平台)详解
java·开发语言·spring·腾讯云
wearegogog12333 分钟前
基于MATLAB的D2D仿真场景实现
开发语言·网络·matlab
froginwe1135 分钟前
Chart.js 散点图详解
开发语言
独自破碎E38 分钟前
【纵向扫描】最长公共前缀
java·开发语言
nuo53420244 分钟前
C语言实现类似面向对象的三大特性
c语言·开发语言