C语言课程设计 问题 G: 整数连接

本题要求将若干个正整数(1至99)按特定规则连接起来形成一个尽可能小的整数。通过比较两个数的不同位数及其首位数字来决定连接顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题 G: 整数连接
时间限制: 1 Sec  内存限制: 128 MB
提交: 1323  解决: 375
[提交][状态][讨论版]
题目描述
设有n个正整数,将它们联接成一排,组成一个最小的多位整数。例如,3个整数32,3,21连接成的最小整数为:21323。
既然这是第一个题,那就要简单一点,不然很多参赛选手会很伤心的,因此,我特地将这个题目简化了一下,限定n个正整数的取值为1至99之间的正整数。
输入
先输入正整数个数n的值(1<=n<=50);
然后输入n个正整数(取值范围为1~99)。
输出
输出n个正整数连接而成的最小整数。
样例输入
3
32 3 21
样例输出
21323

来源: http://125.221.232.253/JudgeOnline/problem.php?cid=1181&pid=6
#include<stdio.h>
#include<stdlib.h>

int A[51];

int cmp(const void* a,const void*b)
{
    int A=*(int *)a,B=*(int *)b;
    int m,n;
    if(A/10) m=A/10;else     m=A;
    if(B/10) n=B/10;else     n=B;
    if(A>10&&B>10) return A-B;
    if(m>n)       return 1;
    else if(m<n)  return -1;
    else          return A%10-B%10;
}
int main(void)
{
    int n;
    while(~scanf("%d",&n)) 
    {
        for(int i=1;i<=n;i++) scanf("%d",&A[i]);
        qsort(A+1,n,sizeof(A[0]),cmp);
        for(int i=1;i<=n;i++) printf("%d",A[i]);
        putchar('\n');
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值