最大整数(Noip1998连接多位数)
最大整數(shù)(Noip1998連接多位數(shù))
【問題描述】
設(shè)有n個(gè)正整數(shù)(n≤20),將它們聯(lián)接成一排,組成一個(gè)最大的多位整數(shù)。
例如:n=3時(shí),3個(gè)整數(shù)13,312,343聯(lián)接成的最大整數(shù)為:34331213
又如:n=4時(shí),4個(gè)整數(shù)7,13,4,246聯(lián)接成的最大整數(shù)為:7424613
【輸入格式】
n
n個(gè)數(shù)
【輸出格式】
聯(lián)接成的多位數(shù)
【輸入樣例】maxnum.in
3
13 312 343
【輸出樣例】maxnum.out
34331213
分析:
這個(gè)題目很自然地想到把n個(gè)數(shù)按照字符串排序之后輸出即可。
但是對(duì)兩個(gè)串A和B,假如按照正常的strcmp(A,B)的結(jié)果來判斷A和B的大小關(guān)系
從而作為排序依據(jù)的話,很容易就可以舉例說明不正確:
例如A=“13”,B=“132”,strcmp(A,B)發(fā)現(xiàn)A<B,但是AB>BA。
所以,這里應(yīng)該判斷AB和BA的大小關(guān)系來判斷A和B的大小關(guān)系:
若是AB>BA則A>B,若是AB<BA則A<B,否則A==B。
按照這個(gè)比較規(guī)則對(duì)所有字符串排序并輸出即可。
?
1 #include <stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int cmp(const void * a,const void *b) 5 { 6 char ab[105],ba[105]; 7 strcpy(ab,(char *)a);strcat(ab,(char *)b); 8 strcpy(ba,(char *)b);strcat(ba,(char *)a); 9 return strcmp(ba,ab); 10 } 11 int main() 12 { 13 int n,i,temp; 14 char a[23][50]; 15 freopen("maxnum.in","r",stdin); 16 freopen("maxnum.out","w",stdout); 17 scanf("%d",&n); 18 for(i=0;i<n;i++) 19 scanf("%s",a[i]); 20 /*for(i=0;i<n;i++) 21 printf("%s\n",a[i]);*/ 22 qsort(a,n,sizeof(a[0]),cmp); 23 for(i=0;i<n;i++) 24 printf("%s",a[i]); 25 return 0; 26 }?
轉(zhuǎn)載于:https://www.cnblogs.com/huashanqingzhu/p/6728717.html
總結(jié)
以上是生活随笔為你收集整理的最大整数(Noip1998连接多位数)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nmake构建Geos库
- 下一篇: 蓝桥杯 1427 买不到的数目