趣味算法------拼数

题目描述

设有 n 个正整数 a 1...a n ,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。

输入格式
第一行有一个整数,表示数字个数 n。

第二行有 n 个整数,表示给出的 n 个整数 a i。

输出格式
一个正整数,表示最大的整数。

输入输出样例
输入 1

3
13 312 343
输出 1
34331213

输入 2
4
7 13 4 246
输出 2
7424613
输入第一行表示输入数字个数为 3,第二行再给出 3 个整数;首先将 3 个整数进行首尾相接,一个整数位置不变的情况下,将其他整数进行连接组成最大的整数。例如输出 34331213:343 为其中数字最大的值,其次时 312,最后接上 13 即可得出最大整数。

思路解析:

简单来说这道题目的就是将n个数组合拼接求出组合的最大值。这道题有许多不同的方法,比图第一个是暴力求解,也就是将所有的可能都枚举出来,然后一个一个比较,第二是使用深度优先搜索来解决,但是当数据太多时,这两种浪费的时间太多,所以我们需要另一种方法。

假如数据只有7,12时呢?有712和127来比较,如果有7,12,13呢?我们先比较前两个数字,712,127,发现712大,7和12不需要交换位置,然后比较12,13,发现1213<1312,需要交换位置变为7,13,12,最后组合就是71312。

现在按照这个思路我给大家出一组数据。(请在草稿纸上演练)

7,12,13,42,56,53,31。

有没有发现比较熟悉。。。。。。。

这就是我们在早期说过的冒泡排序,可以在往期文章中了解,只不过交换位置判定条件从两个数字之间的大小变成两个数字组合方案的最大值决定。

具体代码:

#include<stdio.h>

#include<math.h>

int fun(int n)

{

int count = 0;

while (n)

{

count++;

n /= 10;

}

return count;

}//求数字的位数。

int check(int n, int m)

{

int count1 = n * pow(10, fun(m)) + m;//count1的值是nm组合

int count2 = m * pow(10, fun(n)) + n;//count2的值是mn组合

if (count1 > count2)

return 1;

return 0;

}

int main(void)

{

int n;

int arr100 = { 0 };

scanf("%d", &n);

for (int i = 0; i < n; i++)

scanf("%d", &arri);//数据输入。

for(int i = 0;i<n;i++)

for (int j = 0; j < n - i - 1; j++)

if (check(arrj+1, arrj))

{

int t = arrj + 1;

arrj + 1 = arrj;

arrj = t;

}//"冒泡"排序

for (int i = 0; i < n; i++)

printf("%d", arri);//按顺序逐个打印。

}

注意:

pow()函数"属于"math.h,传入两个参数,比如pow(n,m)的返回值是n的m次幂,但是要注意返回值非整型。

我们为什么最后不直接打印一个整数呢(组合),而是要按数组顺序打印?这是因为在正常情况下刷题和比赛网站判断正确与否是看显示屏上输出的内容和答案是不是一样,换而言之,

答案打印1213和依次打印1,2,1,3没有什么区别。

实际上我们判断数字需不需要交换还可以看两个相同位上的数字,比如7,17。7显然比1大,所以直接是717,但是逐位判断时间复杂度还会增加,不过当数据量太多时相比起优先搜索和暴力枚举还是很快的。

相关推荐
旖旎夜光7 分钟前
LeetCode 974:和可被 K 整除的子数组(前缀和) —— 题解
数据结构·c++·算法·leetcode·前缀和
无限码力11 分钟前
拼多多笔试真题 2026-8-30【唯一入栈出库序列】
算法·pdd笔试真题·拼多多春招笔试真题·拼多多秋招笔试真题·拼多多笔试真题题解·拼多多最新笔试题库
lvwangshu11 分钟前
分治:序列分治(CDQ)与点分治
算法·分治
无限码力16 分钟前
2026-8-30拼多多笔试真题-哪个查阅窗能留空(C++/Py/Java /Js/Go)
算法·pdd·pdd笔试真题·拼多多春招笔试真题·拼多多秋招笔试真题·拼多多笔试真题题解·拼多多笔试题解
SelectDB技术团队20 分钟前
StarRocks 适合做日志分析吗?
大数据·数据结构·后端·python·doris·日志分析·starrock
彷徨而立28 分钟前
【C/C++】多线程读写普通 int 变量的一些问题(二)
c语言·c++
luj_176836 分钟前
毒素驱动的生物自毁机制探析
服务器·c语言·开发语言·经验分享·算法
一水鉴天1 小时前
问题分类的三元组映射体系与求解方法论 20260901(千问)
人工智能·算法·机器学习
breeze jiang1 小时前
LangChain Memory 实战:用 InMemoryChatMessageHistory 管理多轮对话
前端·算法·langchain
地平线开发者16 小时前
【模型轻量化专题】衡量模型轻量性的指标
算法