洛谷 P1012 [NOIP1998 提高组] 拼数

P1012 [NOIP1998 提高组] 拼数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 11
int minn(int a, int b) {
return a < b ? a : b;
}
int compare_number(const void* a, const void* b) {//特殊情况:135和13,32和321
int str_a = strlen((char*)a), str_b = strlen((char*)b);
int str_min = minn(str_a, str_b);
int answer = strncmp((char*)b, (char*)a, str_min);//比较两个字符串的公共长度部分
if (answer != 0 || str_a == str_b)//如果已经能判断出结果,就返回
return answer;
else if (str_a > str_b)//如果字符串a的长度更长,就比较a的剩余部分和字符串b
return compare_number(a + str_min, b);
else // if (str_b > str_a)
return compare_number(a, b + str_min);
}
int main() {
int n;
scanf("%d", &n);
char number[n][LENGTH];
for (int i = 0; i < n; i++)
scanf("%s", &number[i]);//输入
qsort(number, n, sizeof(number[0]), compare_number);//排序
for (int i = 0; i < n; i++)
printf("%s", number[i]);//输出
system("pause");
return 0;
}
posted @   残影0无痕  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示