当前位置: 首页 > article >正文

蓝桥杯历届真题 # 封闭图形个数(C++,Java)

文章目录

  • 题目解读
  • [蓝桥杯 2024 省 C] 封闭图形个数
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
  • 思路
  • 完整代码


题目解读

题目链接

[蓝桥杯 2024 省 C] 封闭图形个数

题目描述

在蓝桥王国,数字的大小不仅仅取决于它们的数值大小,还取决于它们所形成的“封闭图形”的个数。

封闭图形是指数字中完全封闭的空间,例如数字 1 1 1 2 2 2 3 3 3 5 5 5 7 7 7 都没有形成封闭图形,而数字 0 0 0 4 4 4 6 6 6 9 9 9 分别形成了 1 1 1 个封闭图形,数字 8 8 8 则形成了 2 2 2 个封闭图形。值得注意的是,封闭图形的个数是可以累加的。例如,对于数字 68 68 68,由于 6 6 6 形成了 1 1 1 个封闭图形,而 8 8 8 形成了 2 2 2 个,所以 68 68 68 形成的封闭图形的个数总共为 3 3 3

在比较两个数的大小时,如果它们的封闭图形个数不同,那么封闭图形个数较多的数更大。例如,数字 41 41 41 和数字 18 18 18,它们对应的封闭图形的个数分别为 1 1 1 2 2 2,因此数字 41 41 41 小于数组 18 18 18。如果两个数的封闭图形个数相同,那么数值较大的数更大。例如,数字 14 14 14 和数字 41 41 41,它们的封闭图形的个数都是 1 1 1,但 14 < 41 14 < 41 14<41,所以数字 14 14 14 小于数字 41 41 41。如果两个数字的封闭图形个数和数值都相同,那么这两个数字被认为是相等的。

小蓝对蓝桥王国的数字大小规则十分感兴趣。现在,他将给定你 n n n 个数 a 1 , a 2 , ⋯   , a n a_1, a_2,\cdots, a_n a1,a2,,an,请你按照蓝桥王国的数字大小规则,将这 n n n 数从小到大排序,并输出排序后结果。

输入格式

输入的第一行包含一个整数 n n n,表示给定的数字个数。

第二行包含 n n n 个整数 a 1 , a 2 , ⋯   , a n a_1, a_2,\cdots, a_n a1,a2,,an,相邻整数之间使用一个空格分隔,表示待排序的数字。

输出格式

输出一行包含 n n n 个整数,相邻整数之间使用一个空格分隔,表示按照蓝桥王国的数字大小规则从小到大排序后的结果。

样例 #1

样例输入 #1

3
18 29 6

样例输出 #1

6 29 18

提示

【样例说明】

对于给定的数字序列 [ 18 , 29 , 6 ] [18, 29, 6] [18,29,6],数字 18 18 18 的封闭图形个数为 2 2 2,数字 29 29 29 的封闭图形个数为 1 1 1,数字 6 6 6 的封闭图形个数为 1 1 1。按照封闭图形个数从小到大排序后,得到 [ 29 , 6 , 18 ] [29, 6, 18] [29,6,18]

由于数字 29 29 29 和数字 6 6 6 的封闭图形个数相同,因此需要进一步按照数值大小对它们进行排序,最终得到 [ 6 , 29 , 18 ] [6, 29, 18] [6,29,18]

【评测用例规模与约定】

对于 50 % 50\% 50% 的评测用例, 1 ≤ n ≤ 2 × 1 0 3 1\le n \le 2 \times 10^3 1n2×103 1 ≤ a i ≤ 1 0 5 1 \le a_i \le 10^5 1ai105
对于所有评测用例, 1 ≤ n ≤ 2 × 1 0 5 1 \le n\le 2 \times 10^5 1n2×105 1 ≤ a i ≤ 1 0 9 1 \le a_i \le 10^9 1ai109

思路

按照比较规则手写排序即可

完整代码

#include<bits/stdc++.h>

using namespace std;

const int N =2e5+10;

struct arr{
    int num;
    int cnt;
}arr[N];

int check(int n){
    int cnt=0;
    while(n){
        int temp=n%10;
        if(temp==0 || temp==4 || temp==6 || temp==9)cnt++;
        else if(temp==8)cnt+=2;
        n/=10;
    }
    return cnt;
}

bool cmp(struct arr x, struct arr y) {
    //如果cnt一样大,那么就比较num -- 升序排序
    if (x.cnt == y.cnt)return x.num < y.num;
    //否则优先比较 cnt的大小
    else return x.cnt < y.cnt;
}

int main(){
    int n;
    scanf("%d",&n);

    for(int i=0; i<n; i++){
        int num;
        scanf("%d",&num);
        //统计封闭图形个数
        int cnt=check(num);
        arr[i]={num,cnt};
    }

    sort(arr,arr+n,cmp);

    for(int i=0; i<n; i++)printf("%d ",arr[i].num);
}
import java.util.*;


class Arr{
    int num;
    int cnt;

    Arr(int num, int cnt) {
        this.num = num;
        this.cnt = cnt;
    }

}

class Main{
    static Scanner sc =new Scanner(System.in);
    static final int N = 200010;
    static Arr[] arr = new Arr[N];
    public static void main(String args[]) {
        int n =sc.nextInt();
        for(int i=0; i<n; i++){
            int num=sc.nextInt();
            int cnt=check(num);
            arr[i]=new Arr(num,cnt);
        }
        Arrays.sort(arr,0,n,cmp);

        for(int i=0; i<n; i++){
            System.out.println(arr[i].num+" ");
        }
    }

    static int check(int n){
        int cnt=0;
        while(n>0){
            int temp=n%10;
            if(temp==0 || temp==4 || temp==6 || temp==9)cnt++;
            else if(temp==8)cnt+=2;
            n/=10;
        }
        return cnt;
    }

    static Comparator<Arr> cmp = new Comparator<Arr>() {
        @Override
        public int compare(Arr x,Arr y){
            if(x.cnt==y.cnt)return Integer.compare(x.num, y.num);
            else return Integer.compare(x.cnt, y.cnt);
        }
    };
}

🌻编写本篇文章目的是笔者想以输出的形式进行学习,顺便记录学习点滴🌻

🌹 如果本篇文章对你有帮助的话那就点个赞吧👍🌹

😇 本篇文章可能存在多处不足,如有修改意见,可以私信或者评论我哦 😇


在这里插入图片描述


http://www.kler.cn/a/500799.html

相关文章:

  • 青少年编程与数学 02-006 前端开发框架VUE 18课题、逻辑复用
  • SQLite PRAGMA
  • 游戏引擎学习第78天
  • CTFshow—文件包含
  • 研究线段树的最大子段和
  • YangQG 面试题汇总
  • Win32汇编学习笔记10.OD插件
  • Vue.js组件开发-如何使用day.js、luxon或date-fns处理日期时间
  • 【经管数据】ZF数字采购采购明细数据(2015.3-2024.3)
  • Mybatis——Mybatis开发经验总结
  • Vue 常用指令详解(附代码实例)
  • C++(10)—类和对象(上) ③this指针的详解
  • RAG技术:是将知识库的文档和问题共同输入到LLM中
  • 多媒体技术学习笔记
  • 饭搭难点亮点
  • 25/1/12 算法笔记 剖析Yolov8底层逻辑
  • 【2024年华为OD机试】(C卷,100分)- 单词加密(Java JS PythonC/C++)
  • 【学习笔记】理解深度学习的基础:机器学习
  • webpack打包要义
  • 什么是MVCC
  • 【ASP.NET学习】Web Pages 最简单的网页编程开发模型
  • 深入浅出Java Web开放平台:从API设计到安全保障的全方位探索
  • --- 多线程编程 基本用法 java ---
  • 从零开始开发纯血鸿蒙应用之多签名证书管理
  • A3. Springboot3.x集成LLama3.2实战
  • B+ 树的实现原理与应用场景