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 且 arri == arrj,则将 arrj 置为 0,并增加计数器 e 的值。
  5. 再次使用两层循环对数组 arr 进行冒泡排序,将较大的数向后移动。
  6. 输出去重后数组的长度 n - e。
  7. 遍历数组 arr,输出非零元素。
相关推荐
星栈独行13 小时前
翻完 Pi 源码:它和 Codex、Claude Code 有何不同
开发语言·javascript·人工智能·程序人生
2601_9545267513 小时前
【工业传感与算法实战】温漂补偿与零点抗漂破局:基于二阶多项式拟合的 C/C++ 边缘校准算法,深度拆解“压力变送器什么牌子好”的技术硬指标
c语言·c++·算法
qq_4480111614 小时前
C语言中的变量和函数的定义与声明
android·c语言·开发语言
code_pgf14 小时前
`unordered_map` 详解
c++
孫治AllenSun15 小时前
【DataX】生产环境搭建DataX集群案例
java·开发语言·jvm
一拳一个呆瓜16 小时前
【STL】iostream 编程:检测提取操作产生的错误
c++·stl
稚南城才子,乌衣巷风流16 小时前
判断素数与拓展应用
c++
众少成多积小致巨16 小时前
C++ 规范参考(下)
c++
c2385616 小时前
把 C++ 内存分配拆透:new 与 malloc 的三层血缘
开发语言·c++·算法
moonsims17 小时前
星闪在跨域无人化系统作用
开发语言·php