zoukankan      html  css  js  c++  java
  • HDU1029时钟(排序)

    题意:是用两个指针的一个模拟时钟的时针和分针。两个指针形成一个角度。角度测量两个指针之间的最小角度。两只手之间的角度是大于或等于0,且小于或等于180度的度量。由于一个序列的五个不同的写入时间,格式为hh:mm,其中......是两个数字较完整的24小时( 00 <= ...... <= 23)和mm(00 <=毫米<= 59),你发现的中位数,也就是写一个程序,第三个元素的排序序列在两个数字代表分钟非递减顺序及其关联的角度。例如,假设您将得到一个序列(06:05,07:10,03:00,21:00,下午12:55)次。关系被打破这样一种方式,一个较早的时间排在稍后的时间之前。因为排序的序列(12:55,03:00,21:00,06:05,07:10),你输出的是21:00。

    http://acm.hdu.edu.cn/showproblem.php?pid=1209

    题解:排序;

    错误分析:1:小时和分钟不一定是整10或5;

       2:时针随着分针的变化而变化;所以时针与12的角度为angle=(hh+mm/60)*30;

       3:输出格式可以用printf("%02d%02d",time[2].hh,time[2].mm);

      上网搜了一个解题报告看到了这种数出格式,然后就试了一下,发现比我写的

    if(time[2].hh<10)
            printf("0%d",time[2].hh);
            else
            printf("%d",time[2].hh);
            if(time[2].mm<10)
            printf(":0%d
    ",time[2].mm);
            else
            printf(":%d
    ",time[2].mm);


    好用多了,然后就百度一下解释:

    2是宽度很简单。如果整数不够2列就补上0
    比如
    printf("%02d" ,3);
    
    结果就是
    03
    如果大于2没有影响
    printf("%02d",1234);
    1234

    代码实现

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    typedef struct clock
    {
        int hh;
        int mm;
        double angle;
    }clock;
    clock time[6];
    bool cmp( clock x1,clock x2 )//比较
    {
        if(x1.angle==x2.angle)
        {
            if(x1.hh==x2.hh)
            return(x1.mm<x2.mm);
            return (x1.hh<x2.hh);
        }
    
        return x1.angle<x2.angle;
    }
    int main()
    {
        int t,h,m;
        double angle1,angle2,angle3;
        scanf("%d",&t);
        while(t--)
        {
            for(int i=0;i<5;i++)
            {
                scanf("%d:%d",&h,&m);
                time[i].hh=h;
                time[i].mm=m;
                angle1=30*(h%12)+m*0.5;//时针与0时的角度;
                angle2=m*6;//分针与0分的角度
                angle3=fabs(angle1-angle2);
                if(angle3>180)angle3=360.0-angle3;
                time[i].angle=angle3;
            }
            sort(time,time+5,cmp);//排序
            printf("%02d:%02d
    ",time[2].hh,time[2].mm);
        }
    
        return 0;
    }
    

    排序的相关题目

    HDU1029 Ignatius and the Princess IV

    http://acm.hdu.edu.cn/showproblem.php?pid=1029

    代码

    #include<cstdio>
    #include<algorithm>
    #define MAX 1000000
    using namespace std;
    int a[MAX];
    int main()
    {
        int i,n;
        while(scanf("%d",&n)!=EOF)
        {
            for(i=0;i<n;i++)
            scanf("%d",&a[i]);
            sort(a,a+n);
            int flag=a[0],count=0;
            for(i=0;i<n;i++)
            {
                if(flag==a[i])
                {
                       count++;
                       if((n+1)/2<=count)break;
                }
                else
                {
                    flag=a[i];
                    count=1;
                }
            }
            printf("%d
    ",a[i]);
        }
        return 0;
    }
    

    HDU2673 shǎ崽 OrOrOrOrz

    http://acm.hdu.edu.cn/showproblem.php?pid=2673

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int a[10005];
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
            sort(a,a+n);
            printf("%d %d",a[n-1],a[0]);
            for(int i=1;i<n/2;i++)
            printf(" %d %d",a[n-i-1],a[i]);
            if(n%2==1)
            printf(" %d",n/2+1);
            printf("
    ");
    
    
        }
        return 0;
    }
    

    HDU1280 前m大的数

    http://acm.hdu.edu.cn/showproblem.php?pid=1280

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    bool mysort(int x,int y)
    {
        return(x>y);
    }
    int b[45000000];
    int main()
    {
        int i,j,k,n,m,a[3002];
        while(scanf("%d %d",&n,&m)!=EOF)
        {
            k=0;
           for(i=0;i<n;i++)
           scanf("%d",&a[i]);//输入
           for(i=0;i<n-1;i++)
           for(j=i+1;j<n;j++)
           b[k++]=a[i]+a[j];//两两相加的和
            sort(b,b+n*(n-1)/2,mysort);//排序
            printf("%d",b[0]);//控制输出格式
            for(i=1;i<m;i++)
              printf(" %d",b[i]);
            printf("
    ");
        }
       return 0;
    }




  • 相关阅读:
    debian 9 安装AMD驱动
    DDL、DML、DCL、DQL的理解
    呼叫中心坐席功能都有哪些?
    使用vi编辑器的问题
    百度聊天机器人UNIT http访问
    通过http方式 post天气,并合成语音
    单链表的基本操作
    pip下载慢解决(添加国内镜像)
    Anaconda+Tensorflow配置说明
    gdb的基本使用
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3206253.html
Copyright © 2011-2022 走看看