欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

hdu 5055(贪心)

发布时间:2025/3/16 编程问答 27 豆豆
生活随笔 收集整理的这篇文章主要介绍了 hdu 5055(贪心) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题意:给你N个数,每个数的取值范围为[0,9],求这N个数组成的最大奇数,且该奇数不能有前导零。

解题思路:将偶数和奇数分开,然后分别按从小到大排序,将最小的奇数先拿出来,把剩余的数从大到小排好,最后再将最小的奇数放进去。

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std;const int maxn = 105; int n,a,oddNum,evenNum; char odd[maxn],even[maxn],res[maxn];bool cmp(int a,int b) {return a > b; }int main() {while(scanf("%d",&n)!=EOF){evenNum = oddNum = 0;for(int i = 1; i <= n; i++){scanf("%d",&a);if(a % 2 == 0)even[evenNum++] = '0' + a;else odd[oddNum++] = '0' + a;}if(oddNum == 0){printf("-1\n");continue;}sort(odd,odd+oddNum,cmp);sort(even,even+evenNum,cmp);int l = 0, r = 0, cnt = 0;while(l < oddNum - 1 && r < evenNum){if(odd[l] > even[r]){res[cnt++] = odd[l];l++;}else{res[cnt++] = even[r];r++;}}while(r < evenNum){res[cnt++] = even[r];r++;}while(l < oddNum){res[cnt++] = odd[l];l++;}res[cnt] = '\0';if(res[0] == '0') printf("-1\n");else printf("%s\n",res);}return 0; }

总结

以上是生活随笔为你收集整理的hdu 5055(贪心)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。