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,输出非零元素。
相关推荐
nbsaas-boot2 小时前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql
岁忧2 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
chao_7892 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
风无雨2 小时前
GO 启动 简单服务
开发语言·后端·golang
斯普信专业组2 小时前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang
我是苏苏4 小时前
C#基础:Winform桌面开发中窗体之间的数据传递
开发语言·c#
斐波娜娜4 小时前
Maven详解
java·开发语言·maven
小码氓5 小时前
Java填充Word模板
java·开发语言·spring·word
暮鹤筠5 小时前
[C语言初阶]操作符
c语言·开发语言
蜉蝣之翼❉7 小时前
CRT 不同会导致 fopen 地址不同
c++·mfc