2.组成最大数

小组中每位都有一张卡片,卡片上是6位内的正整数,将卡片连起来可以组成多种数字,计算组成的最大数字。

输入描述:

","号分割的多个正整数字符串,不需要考虑非数字异常情况,小组最多25个人.

输出描述:

最大的数字字符串

示例1:

输入:22,221

输出:22221

一、问题分析

首先读题,仔细看描述中的内容,发现需求是

1.将多个正整数拼接起来,组成最大的数字字符串

二、解题思路

1.最高位最大的放前面

比如9,8,345,的情况,先放9然后放8然后放345

2.如果遇到相同的情况,我们需要考虑第二位,如果第二位没有我们当作是0,

例如遇到8,81,76

8和81都是8开头的,但是81的第二位是1,8没有第二位,当做0考虑,所以81在前面

3.191,19,但是如果遇到类似小的数字在前面,后面跟着的数字比较大的情况就不适用了

这里191和190对比,191比较大,但是

19119比19191要小

4.然后考虑拼接排序,拼接之后,放在前面使得数字比较大的,放在前面

拼接之后,放在后面使得数字比较大的,放在后面

5.可以使用qsort完成,我们在比较函数中定义两个

三、具体步骤

使用的语言是C

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void* a, const void* b) {
    int x = *(int *)a;
    int y = *(int *)b;
    unsigned long long sx = 10, sy = 10;
    while(sx <= x) sx *= 10;
    while(sy <= y) sy *= 10;
    return (sx * y + x) > (sy * x + y);
}

char* largestNumber(int* nums, int numsSize) {
    qsort(nums, numsSize, sizeof(int), compare);
    if(nums[0] == 0 ) return "0";
    char* ans = malloc(sizeof(char) * 1000);
    char* p = ans;
    for(int i = 0; i < numsSize; i++) {
        sprintf(p, "%d", nums[i]);
        p += strlen(p);
    }
    return ans;
}

int main(){
    int numsSize;
    int nums[100];
    scanf("%d", &numsSize);
    char tempstr[1000];
    scanf("%s", tempstr);
    nums[0] = atoi(strtok(tempstr,","));
    for(int i = 1; i < numsSize; i++){
        nums[i] = atoi(strtok(NULL, ","));
    }
    char *ans = largestNumber(nums, numsSize);
    printf("%s\n", ans);
    return 0;
}
相关推荐
袋鼠云数栈5 小时前
集团数字化统战实战:统一数据门户与全业态监管体系构建
大数据·数据结构·人工智能·多模态
小月球~6 小时前
天梯赛 · 并查集
数据结构·算法
三道渊8 小时前
C语言:文件I/O
c语言·开发语言·数据结构·c++
kali-Myon8 小时前
CTFshow-Pwn142-Off-by-One(堆块重叠)
c语言·数据结构·安全·gdb·pwn·ctf·
计算机安禾9 小时前
【数据结构与算法】第19篇:树与二叉树的基础概念
c语言·开发语言·数据结构·c++·算法·visual studio code·visual studio
寻寻觅觅☆10 小时前
东华OJ-基础题-30-求最晚和最早日期(C++)
数据结构·c++·算法
We་ct12 小时前
LeetCode 295. 数据流的中位数:双堆解法实战解析
开发语言·前端·数据结构·算法·leetcode·typescript·数据流
xiaoye-duck13 小时前
【C++:哈希表】从哈希冲突到负载因子:深入探索开放定址与链地址法的核心机密
数据结构·c++·散列表
Shadow(⊙o⊙)13 小时前
专题一双指针
数据结构
Via_Neo13 小时前
二进制枚举
数据结构·算法·leetcode