【基础题】HDU1164、1170、1194、1202、1205

HDU1164 Eddy’s research I

题目

HDU1164 Eddy’s research I

题目分析

题目大意:分解质因数,输入一个数字将其分解为几个质数之和。
解题思路:首先计算出比65535小的质数存到数组中,然后从按从小到大的顺序遍历数组看能否整除输入的数字,若能就输出,还要看是否能多次整除,若不能就continue。
注意:考虑到输出的格式要求,另设了一个变量来判断是不是第一个数字;要记得考虑到同一个质数可以使用多次的情况。

代码实现

#include
using namespace std;
int num[10000+5];//存放质数

int prime(int x)
{
    if(x==2)
        return 1;
    else
    {
        for(int i=2; i*i<=x; ++i)
            if(x%i==0)
                return 0;
    }
    return 1;
}

int main()
{
    int cnt=0;//质数个数
    for(int i=2; i<=65535; ++i)
        if(prime(i))
            num[cnt++]=i;

    int n;
    while(cin>>n)
    {
        int flag=1;//是不是第一个数
        for(int i=0; i

HDU1170 Balloon Comes!

题目

HDU1170 Balloon Comes!

题目分析

题目大意:前缀表达式,而且是只有1个运算符和2个运算数的情况。
解题思路:水题,略。
注意:有小数的时候才会保留2位小数,能够整除的话就不用保留小数啦;cout会WA,格式输出建议用printf()。

代码实现

#include
#include
using namespace std;

int main()
{
    int n;
    char c;
    int a,b;
    cin>>n;
        while(n--)
        {
            cin>>c>>a>>b;
            if(c=='+')
                cout<

HDU1194 Beat the Spread!

题目

HDU1194 Beat the Spread!

题目分析

题目大意:输入两个非负整数的和和差,看能否找到符合条件的两个非负整数。
解题思路:硬算,由于整数除法的特殊性,算出结果在验算一遍就能知道是否会出现小数(详见代码)。
注意:非负整数!

代码实现

#include
using namespace std;

int main()
{
    int sum,dif;
    int t;
    int a,b;
    while(cin>>t)
    {
        while(t--)
        {
            cin>>sum>>dif;
            a=(sum+dif)/2;
            b=(sum-dif)/2;
            if(a+b==sum&&a-b==dif&&a>=0&&b>=0)
                cout<

HDU1202 The calculation of GPA

题目

HDU1202 The calculation of GPA

题目分析

题目大意:略。
解题思路:水题,输入一门成绩计算一门即可。
注意:GPA的算法,分母是学分之和;s,p是实数,而没说是整数,要用double类型。

代码实现

#include
#include
using namespace std;

int main()
{
    int t;
    double s,p;
    double sum,score;
    while(cin>>t)
    {
        sum=0.0;
        score=0.0;
        while(t--)
        {
            cin>>s>>p;
            if(p==-1)
                continue;
            score+=s;
            if(p>=90)
                sum=sum+4*s;
            else if(p>=80)
                sum=sum+s*3;
            else if(p>=70)
                sum=sum+s*2;
            else if(p>=60)
                sum=sum+s;
        }
        if(score)//有成绩
            printf("%.2lf\n",sum/score);
        else
            cout<<-1<

HDU1205 吃糖果

题目

HDU1205 吃糖果

题目分析

题目大意:略。
解题思路:主要看数量最多的糖果,设为maxn,糖果总数为sum。如果sum是奇数,那么maxn<=sum/2+1;如果sum是偶数,那么maxn<=sum/2;将两式合并可得maxn<=(sum+1)/2,满足这个条件才可以。
注意:一定要理解好题意,Mi是糖果的数目,不是糖果的编号;注意输出的大小写,我就WA在这了。。。

代码实现

#include
#include
using namespace std;

int main()
{
    int t,n;
    int maxn;
    long long sum;//注意范围
    int cnt;

    while(scanf("%d",&t)!=EOF)
    {
        while(t--)
        {
            scanf("%d",&n);
            maxn=0;
            sum=0;
            for(int i=0; imaxn)
                    maxn=cnt;
            }

            if(maxn>(sum+1)/2)
                printf("No\n");
            else
                printf("Yes\n");
        }
    }
    return 0;
}

你可能感兴趣的:(HDU,题解,HDU)