4th IIUC Inter-University Programming |
|
A |
Children’s Game |
Input: standard input |
|
Problemsetter: Md. Kamruzzaman |
给你 N 个正数. 如 123, 124, 56, 90 ,它们可以拼成 1231245690, 1241235690, 5612312490, 9012312456, 9056124123 etc. 有 24 种拼法, 9056124123 最大.
请你找出这个最大的数。
Input
每组数据第一行为 N (≤ 50). 接下来1行有 N 个正数,数据以 0 结尾.
Output
对每组数据,输出最大的拼法.
Sample Input |
Output for Sample Input |
4 |
9056124123 |
按照字符串连起来后(len相等)的字符串比较
值得一提的是qsort中cmp的写法(char[]无法用sort排序)
以及sprintf(占位符随便改,可以将任意类型转换成字符串)
#include<cstdio> #include<iostream> #include<cstring> #include<cstdio> #include<cstdlib> #include<algorithm> #include<functional> using namespace std; #define MAXN (100+10) int cmp(const void *a1,const void *b1) { char *a=(char*)a1,*b=(char*)b1; char _a[MAXN*2]={0},_b[MAXN*2]={0}; sprintf(_a,"%s%s",a,b); sprintf(_b,"%s%s",b,a); return strcmp(_b,_a); } int n; char a[MAXN][MAXN]; int main() { while(scanf("%d",&n)&&n) { for (int i=1;i<=n;i++) scanf("%s",a[i]); qsort(a+1,n,sizeof(a[1]),cmp); for (int i=1;i<=n;i++) printf("%s",a[i]); printf("n"); } return 0; }