洛谷 || 拼数(C语言)
小Bob 小Bob Bob来啦
2020年10月26日 22:44 __ _ _ _ _

点击这里关注”程序员Bob”


Success does not consist in never making mistakes but in never making the same
one a second time.成功并不在于从不犯错,而在于不重蹈覆辙。

题目描述 设有 n个正整数 a1…an将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入格式 第一行有一个整数,表示数字个数n。 第二行有n个整数,表示给出的n个整数。
输出格式 一个正整数,表示最大的整数。
输入输出样例 输入 3 13 312 343 输出 34331213
源代码:
#include<stdio.h>#define MAXl 10000#include<string.h>char t1[MAXl*2],t2[MAXl*2],a[MAXl][MAXl],b[MAXl]={0},c[MAXl];//字符数组t1,t2[将两字符数组以两种顺序组合(存入之临时数组)],//二维字符数组a(存放输入数据),字符数组c(临时存放一组字符,相当于冒泡排序中的t),//字符数组b(初始化为0,用于循环内初始化t1,t2);int o,n,i,j,l;//整型变量 o(存放字符串比较结果),n(存放字符串总个数),i、j(控制循环),l(临时存放字符数组长度,以组合数组)int main(){ scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%s", a[i]);//每次读入一组数据,赋予a[i] } for (i = 0; i < n; i++)//循环n次(将第i个数据与第j个数据进行比较,判断位置是否需要进行交换[进行交换]) for (j = i; j < n; j++)//循环n-i次(因为前面的i个已经作过比较,可以确保其位置恰当) { strcpy(t1, a[i]);//将a[i]拷贝进t1 strcpy(t2, a[j]);//将a[j]拷贝进t2 l = strlen(a[i]);//读取a[i]长度(有效字符之长度) strcpy(t1 + l, a[j]);//将a[j]拷贝进t1(拷贝至l个字符后[避免覆盖]) l = strlen(a[j]);//读取a[j]长度(有效字符之长度) strcpy(t2 + l, a[i]);//将a[i]拷贝进t2(拷贝至l个字符后[避免覆盖]) o = strcmp(t1, t2);//以字典序比较t1,t2大小,结果存入o(若t1>t2返回值>0) if (o > 0)//如果o>0,就把a[i]与a[j]交换位置 { strcpy(c, a[i]);//将a[i]拷贝给c strcpy(a[i], a[j]);//将a[j]拷贝给a[i] strcpy(a[j], c);//将c拷贝给a[j] }//完成a[i]与a[j]位置交换 strcpy(t1, b);//将b拷贝给t1(起到初始化t1的作用[因为b初始化全部元素为0]) strcpy(t2, b);//将b拷贝给t2(起到初始化t2的作用[因为b初始化全部元素为0]) } for (i = n - 1; i >= 0; i--) { printf("%s", a[i]); } return 0;}
运行结果:


**最后的话:****刷题要找自己的不足,然后去专攻。 ** ** ** ** 往期推荐: **
洛谷 || 最厉害的学生 2020-10-18
Windows10下JDK8下载及java环境配置 2020-09-29
IDEA下载及新建第一个Java项目(Helloworld) 2020-10-05
为你,千千万万遍.
关注 程序员Bob 公众号,与你一起终生学习

一键三连,就差你了
预览时标签不可点
阅读
__
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小Bob的博客!











