当前位置:编程学习 > C/C++ >>

hdu 1006 Tick and Tick (解不等式方程)

[cpp]  // Time 46ms, Memory 328K 

// Time 46ms, Memory 328K
[cpp]
?#include<iostream>  
#include<iomanip>  
using namespace std; 
double d; 
struct range 

    double l,r; 
}; 
range get(double a,double b) 

    range p; 
    if(a<0) 
    { 
        p.r=(d-b)/a;p.l=(360-d-b)/a; 
    } 
    else 
    { 
        p.l=(d-b)/a;p.r=(360-d-b)/a; 
    } 
    if(p.l<0) p.l=0; 
    if(p.r>60) p.r=60; 
    if(p.l>p.r) p.l=p.r=0; 
    return p; 

range set(range a,range b) 

    range p; 
    p.l=a.l>b.l?a.l:b.l; 
    p.r=a.r>b.r?b.r:a.r; 
    if(p.l>p.r) p.l=p.r=0; 
    return p; 

double f(int x,int y) 

    int i,j,k; 
    double m,h,a,b,rea=0.0; 
    range s[3][2],s1; 
    m=1.0*y;h=1.0*x; 
    a=1.0/120-0.1; 
    b=30*h-5.5*m; 
    s[0][0]=get(a,b); 
    s[0][1]=get(-a,-b); 
    a=1.0/120-6; 
    b=30*h+0.5*m; 
    s[1][0]=get(a,b); 
    s[1][1]=get(-a,-b); 
    a=0.1-6; 
    b=6*m; 
    s[2][0]=get(a,b); 
    s[2][1]=get(-a,-b); 
    for(i=0;i<2;i++) 
        for(j=0;j<2;j++) 
            for(k=0;k<2;k++) 
            { 
                s1=set(set(s[0][i],s[1][j]),s[2][k]); 
                rea+=s1.r-s1.l; 
            } 
    return rea; 

int main() 

    int i,j; 
    double s; 
    while(cin>>d && d!=-1) 
    { 
        s=0.0; 
        for(i=0;i<12;i++) 
        { 
            for(j=0;j<60;j++) 
            { 
                s+=f(i,j); 
            } 
        } 
        cout<<fixed<<setprecision(3)<<s*100.0/(3600*12)<<endl; 
    } 
    return 0; 

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,