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,输出非零元素。
相关推荐
暖阳华笺4 分钟前
【数据结构与算法】哈希专题
数据结构·c++·算法·leetcode·哈希算法
聆风吟º8 分钟前
【Python编程日志】Python基础数据类型完整梳理
开发语言·python·数据类型
大白话_NOI10 分钟前
【洛谷 P1024 】[NOIP2001 提高组] 一元三次方程求解 - 详细分析与C++实现
c++·算法
随意起个昵称11 分钟前
区间dp-进阶题目1(进阶合并)
c++·算法·动态规划
王老师青少年编程13 分钟前
2022年CSP-X复赛真题及题解(T2:移动棋子)
c++·真题·csp·信奥赛·复赛·csp-x·移动棋子
玖玥拾13 分钟前
C/C++ 数据结构(三)链表核心算法
c语言·数据结构·c++·链表
Sunsets_Red20 分钟前
ABC462D 题解
c++·数学·编程·比赛·atcoder·信息学竞赛·信息学
keykey6.20 分钟前
逻辑回归:从回归到分类
开发语言·人工智能·机器学习
喵星人工作室23 分钟前
C++火影忍者1.1.8
开发语言·c++·游戏
shchojj23 分钟前
ChatGPT Prompt Engineering for Developers - Expanding
开发语言·python·prompt