生活随笔
收集整理的這篇文章主要介紹了
pata1038
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目
pata1038
題目思路
本題思路是對輸入的數(shù)字進(jìn)行排序,首數(shù)字小的在前,若相同則依次比較之后數(shù)字,對于某一數(shù)字為其他數(shù)字前綴的,如32與321則比較將前綴去掉后的1與32的順序。需要注意的是輸出時(shí)對于全0的情況要額外輸出。
參考代碼
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std
;
typedef struct{char c
[9];int n
;
}num
;
bool cmp(num n1
,num n2
);int main()
{int n
,t
=0;cin
>>n
;num nu
[n
];for(int i
=0;i
<n
;i
++){scanf("%s",nu
[i
].c
);nu
[i
].n
=strlen(nu
[i
].c
);}sort(nu
,nu
+n
,cmp
);for(int i
=0;i
<n
;i
++){if(t
==0){for(int j
=0;j
<nu
[i
].n
;j
++){if(nu
[i
].c
[j
]!='0'||t
==1){printf("%c",nu
[i
].c
[j
]);t
=1;}}}else{printf("%s",nu
[i
].c
);}}if(t
==0)printf("0");return 0;}
bool cmp(num n1
,num n2
)
{int i
=0;for(i
=0;i
<n1
.n
&&i
<n2
.n
;i
++){if(n1
.c
[i
]!=n2
.c
[i
])return n1
.c
[i
]<n2
.c
[i
];}if(n1
.n
==n2
.n
)return true;if(i
==n1
.n
){while(i
<n2
.n
){for(int j
=0;j
<n1
.n
&&i
<n2
.n
;j
++,i
++){if(n1
.c
[j
]!=n2
.c
[i
])return n1
.c
[j
]<n2
.c
[i
];}}}else{while(i
<n1
.n
){for(int j
=0;j
<n2
.n
&&i
<n1
.n
;j
++,i
++){if(n2
.c
[j
]!=n1
.c
[i
])return n2
.c
[j
]>n1
.c
[i
];}}}}
總結(jié)
以上是生活随笔為你收集整理的pata1038的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。