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,输出非零元素。
相关推荐
5:001 分钟前
云备份项目
linux·开发语言·c++
笨笨马甲39 分钟前
Qt Quick模块功能及架构
开发语言·qt
乄夜42 分钟前
嵌入式面试高频(5)!!!C++语言(嵌入式八股文,嵌入式面经)
c语言·c++·单片机·嵌入式硬件·物联网·面试·职场和发展
夜晚回家1 小时前
「Java基本语法」代码格式与注释规范
java·开发语言
YYDS3141 小时前
C++动态规划-01背包
开发语言·c++·动态规划
前端页面仔1 小时前
易语言是什么?易语言能做什么?
开发语言·安全
树叶@1 小时前
Python数据分析7
开发语言·python
wydaicls1 小时前
十一.C++ 类 -- 面向对象思想
开发语言·c++
Biomamba生信基地2 小时前
R语言基础| 下载、安装
开发语言·r语言·生信·医药
姜君竹2 小时前
QT的工程文件.pro文件
开发语言·c++·qt·系统架构