hdu 5055(模拟)

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

Problem Description

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".

Input

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).

Output

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.

Sample Input

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

Sample Output

301
425
-1

Source

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[n]%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;
}
时间: 2024-10-09 20:25:48

hdu 5055(模拟)的相关文章

HDU 4930 模拟

Fighting the Landlords Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 266    Accepted Submission(s): 87 Problem Description Fighting the Landlords is a card game which has been a heat for yea

hdu 5055 Bob and math problem

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5055 思路:排序然后直接取出最小的那一个奇数,注意判断n==1时... code1: <span style="font-size:18px;">#include<cstdio> #include<iostream> #include<cmath> #include<algorithm> using namespace std;

HDU 5055 Bob and math problem(构造)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5055 Problem Description 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 need

HDU 5055 Bob and math problem(结构体)

主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5055 Problem Description 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 need

hdu 5055(坑)

题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5055 Bob and math problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 695    Accepted Submission(s): 263 Problem Description Recently, Bob ha

HDU 5055 Bob and math problem(简单贪心)

http://acm.hdu.edu.cn/showproblem.php?pid=5055 题目大意: 给你N位数,每位数是0~9之间.你把这N位数构成一个整数. 要求: 1.必须是奇数 2.整数的前面没有0 3.找到一个最大的整数 如果满足1.2.3条件,就输出这个数,不满足就输出-1. 给个例子 3 1 0 0 这个构成的奇数是001,这个数前面有0,应该输出-1 解题思路: 对给的N个数升序排序. 然后最小的开始找,找到一个奇数,然后把它放在最左边. 然后判断这个数是否,满足要求.满足要

hdu 1022 模拟栈

其实就是模拟一下栈啦. 1 #include <iostream> 2 using namespace std; 3 4 const int N = 10; 5 char o1[N]; 6 char o2[N]; 7 char s[N]; 8 int ans[N * 2]; 9 10 int main () 11 { 12 int n; 13 while ( cin >> n ) 14 { 15 cin >> o1 >> o2; 16 int top = 0

hdu 4054 模拟 练习十六进制输出

http://acm.hdu.edu.cn/showproblem.php?pid=4054 貌似一般区域赛都会有一道水题 这道题PE了一次  因为输出每个数其实是两个位 如果用空格补齐的话  应该用两个空格 我用了一个空格,,, 学到: 1.%x  十六进制输出  可以输出整型,字符型等等 2.%02x  保证两位 而且会输出先导0的两位 //#pragma comment(linker, "/STACK:102400000,102400000") #include <cstd

hdu 5246(模拟)

题解:直接模拟 #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; const int N = 10005; long long n, m, k; long long s[N]; int main() { int t, cas = 1; scanf("%d", &t); while (t--) { scanf("%lld%l