HDU 1006 Tick and Tick

本文探讨了一道关于钟表三个指针在特定条件下感到“开心”的时间占比的问题,并提供了一个详细的Java实现方案。通过精确计算不同指针间的夹角,确定在一天内满足特定角度条件的总时间。

1006题目的意思是: 
一个钟的三个指针在不停的转动,他们已经厌烦了这样,当他们互相的距离角度大于等于D时,他们会很开心,问一天之中他们happy的时间占总时间的概率。

这题想了好久,参考了网上大神,这是他的代码,AC了。使用JAVA来实现这道题。


import java.util.Scanner;
import java.math.BigDecimal;
public class Main{
    public static double max(double a,double b,double c)
    {
        a=a>b?a:b;
        a=a>c?a:c;
        return a;
    }
    public static double min(double a,double b,double c)
    {
        a=a<b?a:b;
        a=a<c?a:c;
        return a;
    }
    public static void main(String [] args)
    {
        int i,j;
        //double dsm[1444],dsh[1444],dmh[26];
        double[] dsm=new double[1444];
        double[] dsh=new double[1444];
        double[] dmh=new double[26];
        double d,sum,x,y;
        double sm,mh,sh;
        int []smf=new int[2];
        int []mhf=new int[2];
        int []shf=new int[2];
        sm=3600.0000/59;
        sh=43200.0000/719;
        mh=43200.0000/11;
        Scanner scan=new Scanner(System.in);
        while (scan.hasNext())
        {
           d=scan.nextDouble();
            if(d==-1)
            {
                System.exit(0);
            }
            sum=0;
            x=0;
            y=0;
            dsm[0]=(10*d)/59;
            dsh[0]=(120*d)/719;
            dmh[0]=(120*d)/11;
            dsm[1]=sm-dsm[0];
            dsh[1]=sh-dsh[0];
            dmh[1]=mh-dmh[0];

            for (i=2,j=3;;i+=2,j+=2)
            {
                dsm[i]=dsm[i-2]+sm;
                dsm[j]=dsm[j-2]+sm;
                if (dsm[i]>43200&&dsm[j]>43200)
                {
                    break;
                }
            }

            for (i=2,j=3;;i+=2,j+=2)
            {
                dsh[i]=dsh[i-2]+sh;
                dsh[j]=dsh[j-2]+sh;
                if (dsh[i]>43200&&dsh[j]>43200)
                {
                    break;
                }
            }
            for (i=2,j=3;;i+=2,j+=2)
            {
                dmh[i]=dmh[i-2]+mh;
                dmh[j]=dmh[j-2]+mh;
                if (dmh[i]>43200&&dmh[j]>43200)
                {
                    break;
                }
            }

            smf[0]=0;
            mhf[0]=0;
            shf[0]=0;
            smf[1]=1;
            mhf[1]=1;
            shf[1]=1;

            while (y<=43200&&x<=43200)
            {
                x=max(dsm[smf[0]],dsh[shf[0]],dmh[mhf[0]]);
                y=min(dsm[smf[1]],dsh[shf[1]],dmh[mhf[1]]);
                if(x<y)
                {
                    sum=sum+(y-x);
                }
                if (y==dsm[smf[1]])
                {
                    smf[0]+=2;
                    smf[1]+=2;
                }
                if(y==dsh[shf[1]])
                {
                    shf[0]+=2;
                    shf[1]+=2;
                }
                if(y==dmh[mhf[1]])
                {
                    mhf[0]+=2;
                    mhf[1]+=2;
                }

            }
            sum=sum/432;
            BigDecimal sum1=new BigDecimal((sum));
            sum1=sum1.setScale(3,BigDecimal.ROUND_HALF_UP);
            System.out.println(sum1);

        }
    }
}

本课题设计了一种利用Matlab平台开发的植物叶片健康状态识别方案,重点融合了色彩与纹理双重特征以实现对叶片病害的自动化判别。该系统构建了直观的图形操作界面,便于用户提交叶片影像并快速获得分析结论。Matlab作为具备高效数值计算与数据处理能力的工具,在图像分析与模式分类领域应用广泛,本项目正是借助其功能解决农业病害监测的实际问题。 在色彩特征分析方面,叶片影像的颜色分布常与其生理状态密切相关。通常,健康的叶片呈现绿色,而出现黄化、褐变等异常色彩往往指示病害或虫害的发生。Matlab提供了一系列图像处理函数,例如可通过色彩空间转换与直方图统计来量化颜色属性。通过计算各颜色通道的统计参数(如均值、标准差及主成分等),能够提取具有判别力的色彩特征,从而为不同病害类别的区分提供依据。 纹理特征则用于描述叶片表面的微观结构与形态变化,如病斑、皱缩或裂纹等。Matlab中的灰度共生矩阵计算函数可用于提取对比度、均匀性、相关性等纹理指标。此外,局部二值模式与Gabor滤波等方法也能从多尺度刻画纹理细节,进一步增强病害识别的鲁棒性。 系统的人机交互界面基于Matlab的图形用户界面开发环境实现。用户可通过该界面上传待检图像,系统将自动执行图像预处理、特征抽取与分类判断。采用的分类模型包括支持向量机、决策树等机器学习方法,通过对已标注样本的训练,模型能够依据新图像的特征向量预测其所属的病害类别。 此类课题设计有助于深化对Matlab编程、图像处理技术与模式识别原理的理解。通过完整实现从特征提取到分类决策的流程,学生能够将理论知识与实际应用相结合,提升解决复杂工程问题的能力。总体而言,该叶片病害检测系统涵盖了图像分析、特征融合、分类算法及界面开发等多个技术环节,为学习与掌握基于Matlab的智能检测技术提供了综合性实践案例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值