首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >找出一个数字超过另一个数字所需的最小天数,并以不同的速度增加

找出一个数字超过另一个数字所需的最小天数,并以不同的速度增加
EN

Stack Overflow用户
提问于 2020-06-14 08:35:29
回答 4查看 4.8K关注 0票数 0

山姆和凯利是编程伙伴。凯利决定更多地练习,因为山姆最初领先。他们每个人每天都要解决一些问题。找出凯利比萨姆解决了更多问题的最小天数。如果Kelly不能超过,则返回-1。

示例:

代码语言:javascript
运行
复制
samDaily = 3
kellyDaily = 5
difference = 5

最初,山姆比凯利解决了更多的差异问题。每天,他们分别解决samDailykellyDaily问题。第一天:samSolved = difference + samDaily =5+3 =8 kellySolved = kellyDaily =5

第2天:samSolved =8+3= 11 kellySolved =5+5= 10第3天:samSolved = 11 +3= 14 kellySolved = 10 +5= 15萨姆比凯利先解决5个问题,他们每天解决3到5个问题。山姆将在第一天后仅领先3分,第二天后1分,而凯利将在第三天超过山姆。

对如何实现这一点有什么想法吗?最好是用Python编写。

EN

回答 4

Stack Overflow用户

发布于 2020-06-25 06:34:57

谢谢宁。

我认为你分享的这个解决方案中有一个错误,我错误地将其提升了。

解决方案应该是:

代码语言:javascript
运行
复制
def days_needed(kellyDaily, samDaily, difference):
    x = difference / (kellyDaily - samDaily)
    if x <= 0: return -1
    return int(x+1)
票数 2
EN

Stack Overflow用户

发布于 2020-08-29 19:01:26

这是优化的,并且所有测试用例都通过了:

代码语言:javascript
运行
复制
class Result 
{
  public static int minNum(int samDaily, int kellyDaily, int difference) 
  {
   // No catching up because samDaily is ahead (positive P) and kellyDaily cannot catch up.
      if (kellyDaily <= samDaily) 
      {
         return -1;
      }
      return difference/(kellyDaily - samDaily) + 1;
  }
}
票数 2
EN

Stack Overflow用户

发布于 2020-06-14 11:32:59

它完全是关于数学的,而不是算法或数据结构。假设x是天数。在x天数之后:

代码语言:javascript
运行
复制
samSolved = difference + x*samDaily 
kellySolved = x*kellyDaily

对于kellySolved > samSolved,我们需要找到正整数x的最小值。

代码语言:javascript
运行
复制
x*kellyDaily > difference + x*samDaily
x > (samDaily-kellyDaily)/difference

Pthon代码:

代码语言:javascript
运行
复制
def days_needed(kellyDaily, samDaily, difference):
    x = (samDaily-kellyDaily)/difference
    if x <= 0: return -1
    return int(x+1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62367113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档