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;

int main()
{
    int n,i;
    int a[110],b[110];
    while(scanf("%d",&n)==1)
    {
        int sum=0;
        int flag;
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            if(a[i]!=0)
            {
                sum++;
            }
        }
        if(n==1)
        {
            if(a[0]%2==1)
            {
                printf("%d\n",a[0]);
            }
            else
            {
                printf("-1\n");
            }
            continue;
        }
        sort(a,a+n);
        for(i=0;i<n;i++)
        {
            if(a[i]%2==1)
            {
                flag=i;
                break;
            }
        }
        if(i==n||sum<=1)
        {
            printf("-1\n");
        }
        else
        {
            for(i=n-1;i>=0;i--)
            {
                if(i!=flag)
                {
                    printf("%d",a[i]);
                }
            }
            printf("%d\n",a[flag]);
        }
    }
    return 0;
}
</span>

code2:

<span style="font-size:18px;">#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>

using namespace std;

int main()
{
    int n,i;
    int a[110],b[110];
    while(scanf("%d",&n)==1)
    {
        int minn=10;
        int sum=0;
        int flag=0;
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            if(a[i]%2==1)
            {
                flag=1;
                minn=min(minn,a[i]);
            }
            if(a[i]!=0)
            {
                sum++;
            }
        }
        if(flag==0)
        {
            printf("-1\n");
            continue;
        }
        if(n==1)
        {
            if(a[0]%2==1)
            {
                printf("%d\n",a[0]);
            }
            else
            {
                printf("-1\n");
            }
            continue;
        }
        if(sum<=1)
        {
            printf("-1\n");
            continue;
        }

        int len=0;
        int flag1=0;
        for(i=0;i<n;i++)
        {
            if(a[i]==minn&&flag1==0)
            {
                flag1=1;
            }
            else
            {
                b[len++]=a[i];
            }
        }
        sort(b,b+len);

        int flag2=0;
        for(i=len-1;i>=0;i--)
        {
            if(b[i]!=0)
            {
                printf("%d",b[i]);
                flag2=1;
            }
            else if(flag2==1)
            {
                printf("%d",b[i]);
            }

        }
        printf("%d\n",minn);
    }
    return 0;
}</span>
时间: 2024-10-31 17:49:39

hdu 5055 Bob and math problem的相关文章

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 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 5055 Bob and math problem (很简单贪心)

给N个数字(0-9),让你组成一个数. 要求:1.这个数是奇数 2.这个数没有前导0 问这个数最大是多少. 思路&解法: N个数字从大到小排序,将最小的奇数与最后一位交换,把剩下前N-1位从大到小排序.输出.(判断第一位是否为0) 代码: #include <cstdio> #include <iostream> #include <string.h> #include <cstdlib> #include <algorithm> #in

hdu 5170 GTY&#39;s math problem(水,,数学,,)

题意: 给a,b,c,d. 比较a^b和c^d的大小 思路: 比较log(a^b)和log(c^d)的大小 代码: int a,b,c,d; int main(){ while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF){ double x1 = b*log((double)a); double x2 = d*log((double)c); if(fabs(x1-x2)<eps){ puts("=")

hdu----(5055)Bob and math problem(贪心)

Bob and math problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 401    Accepted Submission(s): 149 Problem Description Recently, Bob has been thinking about a math problem.There are N Digit

hdu 1757 A Simple Math Problem (乘法矩阵)

A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2441    Accepted Submission(s): 1415 Problem Description Lele now is thinking about a simple function f(x).If x < 10 f(x) =

HDU 5615 Jam&#39;s math problem

Jam's math problem Problem Description Jam has a math problem. He just learned factorization.He is trying to factorize ax^2+bx+c into the form of pqx^2+(qk+mp)x+km=(px+k)(qx+m).He could only solve the problem in which p,q,m,k are positive numbers.Ple

hdu 5615 Jam&#39;s math problem(十字相乘判定)

d. Jam有道数学题想向你请教一下,他刚刚学会因式分解比如说,x^2+6x+5=(x+1)(x+5) 就好像形如 ax^2+bx+c => pqx^2+(qk+mp)x+km=(px+k)(qx+m) 但是他很蠢,他只会做p,q,m,kp,q,m,k为正整数的题目 请你帮助他,问可不可以分解 题意就是问一个一元二次方程能不能进行十字相乘的分解? s. 官方题解:第一道题比较简单,可以说是简单的模拟题,我们考虑到a,b,c都是10^9??的,所以我们决定要把时间复杂度降下来, 对于每一个数,因为