您的位置:首页 > 其它

hdu 5055(模拟)

2016-07-07 11:12 232 查看

Bob and math problem

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1481 Accepted Submission(s): 552


[align=left]Problem Description[/align]
Recently, Bob has been thinking about a math problem.
There are N Digits, each digit is between 0 and 9. You need to use this N Digits to constitute an Integer.
This Integer needs to satisfy the following conditions:

1. must be an odd Integer.

2. there is no leading zero.

3. find the biggest one which is satisfied 1, 2.

Example:

There are three Digits: 0, 1, 3. It can constitute six number of
Integers. Only "301", "103" is legal, while "130", "310", "013", "031"
is illegal. The biggest one of odd Integer is "301".

[align=left]Input[/align]
There are multiple test cases. Please process till EOF.
Each case starts with a line containing an integer N ( 1 <= N <= 100 ).
The second line contains N Digits which indicate the digit a1,a2,a3,⋯,an.(0≤ai≤9).

[align=left]Output[/align]
The
output of each test case of a line. If you can constitute an Integer
which is satisfied above conditions, please output the biggest one.
Otherwise, output "-1" instead.

[align=left]Sample Input[/align]

3
0 1 3
3
5 4 2
3
2 4 6

[align=left]Sample Output[/align]

301
425
-1

[align=left]Source[/align]
BestCoder Round #11 (Div. 2)

n个数字组成一个数,问能够组成的最大的奇数是多少?不能有前导0
直接模拟:1,如果全是偶数直接输出-1
     2,从大到小排序,最低位为奇数直接输出,最低位为偶数的话往前挪,找到第一个奇数,注意一下前导0的情况即可。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <map>
using namespace std;
int cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,a[105];
char c[100];
while(scanf("%d",&n)!=EOF)
{
bool flag = false;
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
if(a[i]%2==1) flag = true;
}
if(!flag) printf("-1\n");
else
{
int res[105];
sort(a+1,a+n+1,cmp);
if(a
%2==1)
{
for(int i=1; i<=n; i++)
{
res[i] = a[i];
}
}
else
{
int t = n;
for(int i=n; i>=1; i--)
{
if(a[i]%2==1)
{
t = a[i];
a[i] = -1;
break;
}
}
int cnt=1;
for(int i=1; i<=n; i++)
{
if(a[i]==-1) continue;
res[cnt++] = a[i];
}
res[cnt] = t;
}
if(res[1]==0) printf("-1\n");
else
{
for(int i=1; i<=n; i++)
{
printf("%d",res[i]);
}
printf("\n");
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: