算法题:整数排成一排求最大值
题目描述
【编程题】丈母娘的考验
题目ID:1136
【问题描述】小豪和女友恋爱数年,终于要修成正果了。今天,他将以准女婿的身份去女友家,唉呀,忐忑不安。
丈母娘一见小豪,嗯嗯,果然是传说中的高富帅,不错不错!
额额额,等会,这孩子不会是红漆马桶吧?长得好看,可是一肚子的粑粑o(^▽^)o,那可配不上我家宝贝乖乖女儿哦。
“小豪,好孩子,能帮阿姨一个忙吗?老年大学有一道题,我还不会呢。”
原来是这样的一道题:有三个正整数,将其连成一排,求最大的数。
例如,5,6,7,最大数为765;又如33,444,5,最大数为544433
你能帮小豪做出这道题吗?使得小豪能通过丈母娘的考验,迎娶白富美,走上人生巅峰。
【输入形式】三个正整数i,j,k(1<=i,j,k<=30000)
【输出形式】最大数
【样例输入】
【测试用例】
1)
输入:
65 654 6543
输出:
656546543
2)
输入:
12 123 1234
输出:
123412312
3)
输入:
123 32 51
输出:
5132123
4)
输入:
87 234 43
输出:
8743234
5)
输入:
234 355 1987
输出:
3552341987
思路分析
- 首先想到的是以int类型存储,取每个数的第一位,进行对比,然后进行冒泡排序,输出,假如第一位相同呢,不是还得对比第二位吗,第二位也同呢不是还得对比第三位吗,太过麻烦,不可行(x)
- 然后可以想到以字符串的类型进行存储,利用string.h中的strcmp函数进行对比,就可以解决对比完第一位还得对比第二位第三位的麻烦问题了,例如对比234和355,可对比出355是大于234的,但是新的问题又出现了,这个数字的位数是不固定的,strcmp函数对比的结果不一定是正确的,例如65和654,strcmp直接对比出的是654大,而我们要的是排列顺序是65654,而不是65465
- 为了解决这个难题,我们可以采用先合并再对比的方法取正确的值,也就是如果字符串A+B>B+A,则A的优先级比较高,A应该放在前面,例如65和654,65654比65465的strcmp值大,则65应该先输出.
代码描述
#include<stdio.h>
#include<string.h>
int main()
{
char a[3][6]; //定义二维数组,以行保存字符串
int i;
for (i=0;i<3;i++){
scanf("%s",&a[i]); //按行读入字符串
}
int j;
for (i=0;i<3;i++){
for (j=0;j<3-i-1;j++){ //j多减1,防止数组越界
char tema[12],temb[12]; //临时数组保存要比较的值
strcpy(tema,a[j]);
strcat(tema,a[j+1]);
strcpy(temb,a[j+1]);
strcat(temb,a[j]);
if (strcmp(tema,temb)<0){ //比较a+b与b+a的大小(字符串比较),把小的顶到右边去
char tem[6]; //临时数组保存a[i]
strcpy(tem,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],tem);
}
}
}
for (i=0;i<3;i++){ //按行输出二维数组
printf ("%s",a[i]);
}
return 0;
}
原文地址:https://www.cnblogs.com/fanqieya/p/10807394.html
时间: 2024-10-07 17:43:15