蓝桥杯c/c++程序设计—— 明明的随机数

题目

洛谷 P1059 [NOIP2006 普及组] 明明的随机数

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成"去重"与"排序"的工作。

输入格式:

输入为2行,第1行为1个正整数,表示所生成的随机数的个数N。 第2行有N个用空格隔开的正整数,为所产生的随机数。

输出格式:

输出为2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

输入样例:

10

20 40 32 67 40 20 89 300 400 15

输出样例:

8

15 20 32 40 67 89 300 400

代码

  1. 首先通过scanf函数从标准输入中获取一个整数n,该整数表示接下来要输入的整数个数。

  2. 声明一个大小为n的整型数组a,并通过循环将n个整数依次存储到数组a中。

  3. 使用冒泡排序算法对数组a进行升序排序。冒泡排序的基本思想是,从第一个元素开始,逐一比较相邻的两个元素,若前者比后者大,则交换它们的位置。通过多次遍历,将最大的元素冒泡到最后的位置。通过这样的遍历和交换过程,数组a中的元素会逐渐有序。

  4. 遍历数组a,如果当前元素与后一个元素相等,则说明存在重复元素,需要将后面的元素往前移动,并相应地将数组的长度减1。

  5. 输出去重后数组的长度sum和去重后的数组内容。

cpp 复制代码
#include <stdio.h>  // 包含标准输入输出库头文件

int main() {  // 主函数
    int n;  // 声明一个整型变量 n
    scanf("%d", &n);  // 从标准输入中读取一个整数并存储到变量 n 中
    int a[n];  // 声明一个大小为 n 的整型数组 a,这是一个变长数组(VLA)
    for (int i = 0; i < n; i++) {  // 循环读取 n 个整数到数组 a 中
        scanf("%d", &a[i]);  // 读取一个整数存储到数组 a 中
    }
    int t;  // 声明一个临时整型变量 t
    int sum = n;  // 声明一个整型变量 sum 并初始化为 n
    for (int i = 0; i < n; i++) {  // 外层循环,控制比较轮次
        for (int j = 0; j < (n - 1) - i; j++) {  // 内层循环,控制每轮比较次数
            if (a[j] > a[j + 1]) {  // 如果前面的数大于后面的数
                t = a[j];  // 交换两个数的值
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
    for (int i = 0; i < sum; i++) {  // 遍历数组去除重复元素
        if (a[i] == a[i + 1]) {  // 如果当前元素等于后面一个元素
            for (int k = i + 1; k < sum; k++) {  // 从i+1位置开始往后遍历
                a[k] = a[k + 1];  // 后面的元素覆盖当前元素
            }
            sum--;  // 数组长度减一
            i--;  // 因为覆盖了当前元素,所以需要回退一个位置
        }
    }
    printf("%d\n", sum);  // 输出去重后数组的长度
    for (int i = 0; i < sum; i++) {  // 输出去重后的数组内容
        printf("%d ", a[i]);
    }
    return 0;  // 返回0,表示程序正常结束
}
  1. 头文件和主函数定义:

    #include <stdio.h> // 包含标准输入输出库头文件

    int main() { // 主函数

  2. 变量定义和输入:

    复制代码
     int n;  // 声明一个整型变量 n
     scanf("%d", &n);  // 从标准输入中读取一个整数并存储到变量 n 中
     int a[n];  // 声明一个大小为 n 的整型数组 a,这是一个变长数组(VLA)
     for (int i = 0; i < n; i++) {  // 循环读取 n 个整数到数组 a 中
         scanf("%d", &a[i]);  // 读取一个整数存储到数组 a 中
     }
  3. 冒泡排序:

    复制代码
     int t;  // 声明一个临时整型变量 t
     for (int i = 0; i < n; i++) {  // 外层循环,控制比较轮次
         for (int j = 0; j < (n - 1) - i; j++) {  // 内层循环,控制每轮比较次数
             if (a[j] > a[j + 1]) {  // 如果前面的数大于后面的数
                 t = a[j];  // 交换两个数的值
                 a[j] = a[j + 1];
                 a[j + 1] = t;
             }
         }
     }
  4. 去重:

    复制代码
     int sum = n;  // 声明一个整型变量 sum 并初始化为 n
     for (int i = 0; i < sum; i++) {  // 遍历数组去除重复元素
         if (a[i] == a[i + 1]) {  // 如果当前元素等于后面一个元素
             for (int k = i + 1; k < sum; k++) {  // 从 i+1 位置开始往后遍历
                 a[k] = a[k + 1];  // 后面的元素覆盖当前元素
             }
             sum--;  // 数组长度减一
             i--;  // 因为覆盖了当前元素,所以需要回退一个位置
         }
     }
  5. 输出结果:

    复制代码
     printf("%d\n", sum);  // 输出去重后数组的长度
     for (int i = 0; i < sum; i++) {  // 输出去重后的数组内容
         printf("%d ", a[i]);
     }
  6. 返回:

    复制代码
     return 0;  // 返回0,表示程序正常结束

    }

相关推荐
AndrewHZ3 分钟前
【图像处理基石】什么是tone mapping?
图像处理·人工智能·算法·计算机视觉·hdr
念九_ysl3 分钟前
基数排序算法解析与TypeScript实现
前端·算法·typescript·排序算法
守正出琦5 分钟前
日期类的实现
数据结构·c++·算法
ChoSeitaku8 分钟前
NO.63十六届蓝桥杯备战|基础算法-⼆分答案|木材加工|砍树|跳石头(C++)
c++·算法·蓝桥杯
YueiL24 分钟前
C++入门练习之 给出年分m和一年中的第n天,算出第n天是几月几号
开发语言·c++·算法
weixin_4352081628 分钟前
通过 Markdown 改进 RAG 文档处理
人工智能·python·算法·自然语言处理·面试·nlp·aigc
ゞ 正在缓冲99%…1 小时前
leetcode75.颜色分类
java·数据结构·算法·排序
奋进的小暄1 小时前
贪心算法(15)(java)用最小的箭引爆气球
算法·贪心算法
Scc_hy2 小时前
强化学习_Paper_1988_Learning to predict by the methods of temporal differences
人工智能·深度学习·算法
巷北夜未央2 小时前
Python每日一题(14)
开发语言·python·算法