100求助,第一个点没过
查看原帖
100求助,第一个点没过
1348393
goodsnack楼主2024/11/23 22:11
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
char ch[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
struct sss
{
    int c[10]; // 存放字符串第一个字符的int值
    int index; // 存放字符串的下标
    int s_len; // 存放字符串长度
};
int main()
{
    IOS;
    int n;
    int a[25];
    cin >> n;
    string s[25]; // 存放字符串
    sss ppp[25];  // 存放字符串信息
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
        ppp[i].index = i; // 下标

        while (a[i]) // 数组转字符串
        {
            s[i] += ch[a[i] % 10];
            a[i] /= 10;
        }
        reverse(s[i].begin(), s[i].end()); // 字符串反转

        ppp[i].s_len = s[i].size(); // 字符串长度
        for (int j = 0; j < ppp[i].s_len; j++)
        {
            ppp[i].c[j] = s[i][j]; // 字符串的每一个字符的int值
        }
    }
    for (int i = 0; i < n; i++)
    {
        // 按字符大小排序,字符越大越前面
        sort(ppp, ppp + n, [](sss a, sss b)
             {
                for(int i = 0; i < a.s_len || i < b.s_len;i++) {
                    if(a.c[i] != b.c[i]) {
                        return a.c[i] > b.c[i];
                    }else if(a.c[i] > b.c[i]) {
                        return true;
                    }else if(a.c[i] < b.c[i]) {
                        return false;
                    }
                } });
    }
    for (int i = 0; i < n; i++)
    {
        cout << s[ppp[i].index];
    }
    return 0;
}
2024/11/23 22:11
加载中...