题解:P10901 [蓝桥杯 2024 省 C] 封闭图形个数

· · 题解

解题思路:

排序题,sort 自定义排序即可。
排序方法就照题目中的来,先定义一个表示每个数字大小的值,也就是封闭图形的个数(题目中已经有了,照打上去就行)。
接着按照先封闭图形的个数、后本身数值的大小从小到大排序,就完结撒花啦!

CODE:

#include <iostream>
#include <algorithm>
using namespace std;
int n, a[200001];
int num[10]{1, 0, 0, 0, 1, 0, 1, 0, 2, 1};//表
int sum(int x)//拆位计算
{
    int ans = 0;
    while (x)
    {
        ans += num[x % 10];
        x /= 10;
    }
    return ans;
}
bool cmp (int a, int b)//cmp 自定义判断
{
    int na = sum(a), nb = sum(b);
    if (na != nb) return na < nb;
    return a < b;
}
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    sort(a + 1, a + n + 1, cmp);
    for (int i = 1; i <= n; i++) cout << a[i] << ' ';
    return 0;
}