zoukankan      html  css  js  c++  java
  • 致初学者(三): HDU 2033~ 2043题解

          下面继续给出HDU 2033~2043的AC程序,供大家参考。2033~2043这10道题就被归结为“ACM程序设计期末考试(2006/06/07) ”和“2005实验班短学期考试 ”。

    HDU 2033:人见人爱A+B

          简单分支结构。

    #include <stdio.h>
    int main()
    {
        int n,ah,am,as,bh,bm,bs;
        scanf("%d",&n);
        while (n--)
        {
            scanf("%d%d%d%d%d%d",&ah,&am,&as,&bh,&bm,&bs);
            bs+=as;
            if (bs>=60)
            {
                bm+=bs/60;
                bs=bs%60;
            }
            bm+=am;
            if (bm>=60)
            {
                bh+=bm/60;
                bm=bm%60;
            }
            bh+=ah;
            printf("%d %d %d
    ",bh,bm,bs);
        }
        return 0; 
    }
    View Code

    HDU 2034:人见人爱A-B

          设用数组a,b,c分别表示集合A,B,C,其中 C=A-B。
          用循环 for (i=0;i<n;i++) 处理集合A中的每个元素a[i],对于元素a[i] 用循环 for (j=0;j<m;j++) 在集合B中查找a[i]是否在集合B中存在,如果a[i]不在集合B中出现,则将a[i]保存到数组c中,作为集合C的一个元素。
          得到数组c后,输出前采用冒泡排序按从小到大的顺序对数组c进行排序。 

    #include <stdio.h>
    int main()
    {
        int n,m,i,j,cnt,t;
        int a[101],b[101],c[101];
        while (1)
        {
            scanf("%d%d",&n,&m);
            if (n==0 && m==0)
                break;
            for (i=0;i<n;i++)        // 输入集合A的元素
                scanf("%d",&a[i]);
            for (i=0;i<m;i++)        // 输入集合B的元素
                scanf("%d",&b[i]);
            cnt=0;                  // 集合C=A-B的元素个数
            for (i=0;i<n;i++)
            {
                for (j=0;j<m;j++)  // 查找当前集合A的元素a[i]是否在集合B中存在
                    if (a[i]==b[j]) break;
                if (j==m)          // 如果a[i]不在集合B中出现
                    c[cnt++]=a[i];
            }
            if (cnt==0)
               printf("NULL
    ");
            else
            {
                for (i=0;i<cnt-1;i++) //用冒泡法排序
                    for (j=0;j<cnt-1-i;j++)
                        if (c[j]>c[j+1])
                        {
                            t=c[j];
                            c[j]=c[j+1];
                            c[j+1]=t;
                        }
                for (i=0;i<cnt;i++)
                {
                    printf("%d ",c[i]);
                }
                printf("
    ");
            }
        }
        return 0; 
    }
    View Code

    HDU 2035:人见人爱A^B

          采用快速幂运算完成A^B的计算。

    #include <stdio.h>
    int mod_pow(int x,int n,int m)  // 快速幂运算
    {
        int ret=1;
        while (n!=0)
        {
            if (n&1) ret=ret*x%m;
            x=x*x%m;
            n/=2;
        }
        return ret;
    }
    int main()
    {
        int a,b;
        while (1)
        {
            scanf("%d%d",&a,&b);
            if (a==0 && b==0) break;
            printf("%d
    ",mod_pow(a,b,1000));
        }
        return 0; 
    }
    View Code

    HDU 2036:改革春风吹满地

           利用向量积(叉积)计算多边形的面积公式为:

                 

           对于此公式推导过程有兴趣的同学可以参阅网上的一篇博文“利用向量积(叉积)计算三角形的面积和多边形的面积”。 

    #include <stdio.h>
    int main()
    {
        int i,n,x[101],y[101];
        double sum;
        while (scanf("%d",&n) && n!=0)
        {
            for (i=0;i<n;i++)
               scanf("%d%d",&x[i],&y[i]);
            sum=0;
            for(i=1;i<n;i++)
               sum+=x[i-1]*y[i]-x[i]*y[i-1]; 
            sum+=x[n-1]*y[0]-x[0]*y[n-1];
            printf("%.1lf
    ",0.5*sum);
        }
        return 0;
    }
    View Code

    HDU 2037:今年暑假不AC

          定义一个结构体
          struct showtime
          {
               int begin;
               int end;
          };
    用于保存电视节目的开始时间和结束时间。定义结构体数组show[101]保存输入的电视节目情况。
          采用贪心法求解。将电视节目(即结构体数组show)按结束时间从小到大排列(若结束时间系统,则按开始时间从大到小)。
          先设lastend=show[0].end,因为第1个元素的结束时间一定是最早的,然后从左到右遍历数组各元素,若当前元素的开始时间大于lastend,则可以看一个完整节目,计数,同时修改lastend使之等于当前元素的结束时间。直到数组全部元素遍历完。

    #include <stdio.h>
    #include <algorithm>
    using namespace std;
    struct showtime
    {
        int begin;
        int end;
    }; 
    bool cmp(showtime a ,showtime b)
    {
        if(a.end != b.end)    
            return a.end < b.end;
        else
            return a.begin > b.begin;
    }
    int main()
    {
        showtime show[101];
        int n,i,cnt,lastend;
        while (scanf("%d",&n) && n!=0)
        {
            for (i = 0;i<n;i++)
            {
                scanf("%d%d",&show[i].begin,&show[i].end);
            }
            sort(show,show+n,cmp);     
            cnt = 1;
            lastend = show[0].end;
            for (i = 0;i < n ;i++)
            {
                if(lastend <= show[i].begin)
                {
                    cnt++;
                    lastend = show[i].end;
                }
            }
            printf("%d
    ",cnt);
        }
        return 0;
    }
    View Code

    HDU 2039:三角形

          简单分支结构。输入三角形三条边后,若满足任意两边的和大于第3条边,则可以构成一个三角形。

    #include <stdio.h>
    int main()
    {
        int m;
        double a,b,c;
        scanf("%d",&m);
        while (m--)
        {
            scanf("%lf%lf%lf",&a,&b,&c);
            if (a+b>c && a+c>b && b+c>a)
               printf("YES
    ");
            else
               printf("NO
    ");
        }
        return 0;
    }
    View Code

    HDU 2040:亲和数

          抽象一个函数 int calcSum(int n)用于计算整数n的所有真因子之和。

    #include <stdio.h>
    #include <math.h>
    int calcSum(int n)
    {
        int sum=1,i,t;
        t=(int)sqrt(1.0*n);
        for (i=2;i<=t;i++)
            if (n%i==0)
                sum+=i+n/i;
        return sum;
    }
    int main()
    {
        int m,a,b;
        scanf("%d",&m);
        while (m--)
        {
            scanf("%d%d",&a,&b);
            if (calcSum(a)==b && calcSum(b)==a)
               printf("YES
    ");
            else
               printf("NO
    ");
        }
        return 0;
    }
    View Code

    HDU 2041:超级楼梯

          设 f[i]表示上到第i级楼梯的方法数。显然上到第i级,可以在第i-1级楼梯跨1级到达;或者在第i-2级楼梯跨2级到达。
          故有 f[i]=f[i-1]+f[i-2]。

    #include <stdio.h>
    int main()
    {
        int n,m,i;
        int f[41]={0,1,1};
        for (i=3;i<=40;i++)
            f[i]=f[i-1]+f[i-2];
        scanf("%d",&n);
        while (n--)
        {
            scanf("%d",&m);
            printf("%d
    ",f[m]);
        }
        return 0;
    }
    View Code

    HDU 2042:不容易系列之二

          简单迭代处理。迭代初值num=3,迭代式为: num=2*(num-1); 。

    #include <stdio.h>
    int main()
    {
        int n,a,i,num;
        scanf("%d",&n);
        while (n--)
        {
            scanf("%d",&a);
            num=3;
            for (i=1;i<=a;i++)
                num=2*(num-1);
            printf("%d
    ",num);
        }
        return 0;
    }
    View Code

    HDU 2043:密码

          简单字符串处理。

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int m,i,f1,f2,f3,f4;
        char str[51];
        scanf("%d",&m);
        while (m--)
        {
            scanf("%s",str);
            if (strlen(str)<8 || strlen(str)>16)
               printf("NO
    ");
            else
            {
                f1=f2=f3=f4=0;
                for (i=0;str[i]!='';i++)
                    if (str[i]>='0' && str[i]<='9')
                        f3=1;
                    else if (str[i]>='A' && str[i]<='Z')
                        f1=1;
                    else if (str[i]>='a' && str[i]<='z')
                        f2=1;
                    else
                        f4=1;
                if (f1+f2+f3+f4>=3)
                    printf("YES
    ");
                else
                    printf("NO
    ");
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    POJ 1548 Robots(最小路径覆盖)
    <html>
    站点开发-日志-1
    JSP入门实战下
    rancher官方资源
    window10死机
    window10桌面图标空白
    sentry使用docker-compose部署
    docker下一步步部署sentry
    docker-compose编排服务
  • 原文地址:https://www.cnblogs.com/cs-whut/p/11525355.html
Copyright © 2011-2022 走看看