前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >做题总结——Delayed Work

做题总结——Delayed Work

作者头像
用户8224910
发布2021-01-26 15:09:07
3670
发布2021-01-26 15:09:07
举报
文章被收录于专栏:个人学习总结个人学习总结

做题总结——Delayed Work

原题

题目描述
题目描述

题意分析:

这道题目是来计算最低的支付金额,该金额由工人的工资和罚款两部分组成。根据题意描述可知,工资的表达式:MX,罚款的表达式:(KP)/M,因此总金额表达式:MX+(KP)/M,这里K、P、X都是已知的,则该表达式变成了关于M的一个对勾函数,又因为M>0,则根据对勾函数的性质,当M=sqrt((KP)/X)时该表达式取得最小值,但是由于M必须是整数,所以可以在M分别是(int)sqrt((KP)/X)和(int)sqrt((K*P)/X)+1代入验证(可以根据函数图像,由于M必须是整数,所以比较离最小值点最近的两个整数,当然求出来的最小值点也可能恰好是整数,这样就多比较了一次,不过也没关系,哪能这么恰好QAQ),求出值更小的就是所求的最低支付金额

许多题目就是需要一些对应的数学知识,解决起来才能够游刃有余,所以先想要学号算法必须学好数学啊…

代码实现

代码语言:javascript
复制
#include<bits/stdc++.h>      //万能头文件
using namespace std;
int main()
{
    double k,p,x;
    cin>>k>>p>>x;
    //离最小值点最近的两个正整数
    int a=(int)sqrt((k*p)/x);      
    int b=a+1;
    double s1,s2;
    //分别代入计算两个整数点的值,也就是两个点对应的支付金额
    s1=((k*p)/a)+x*a;
    s2=((k*p)/b)+x*b;
    if(s1>s2)
    {
        printf("%.3lf\n",s2);
    }
    else
    {
        printf("%.3lf\n",s1);
    }
    //system("pause");
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 做题总结——Delayed Work
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档