找出一个数字超过另一个以不同速率增长的数字所需的最小天数

2024-09-29 22:22:15 发布

您现在位置:Python中文网/ 问答频道 /正文

山姆和凯利是编程伙伴。凯利决心多练习,因为山姆一开始就领先。 他们每天都解决一些问题。找到Kelly的最小天数 解决了比山姆更多的问题。如果凯利不能超过返回-1

例如:

samDaily = 3
kellyDaily = 5
difference = 5

起初,山姆比凯利更能解决差异问题。每天,他们解决samDailykellyDaily每个问题。 第一天:samSolved=difference+samDaily=5+3=8 kellySolved=kellyDaily=5

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

关于如何实现这一点有什么想法吗?最好用Python


Tags: sam编程差异伙伴天数kelly领先difference
3条回答

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

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;
  }
}

谢谢你,尼恩

我相信你分享的这个解决方案有一个错误,我错误地把它投了上去

解决办法应该是:

def days_needed(kellyDaily, samDaily, difference):
    x = difference / (kellyDaily - samDaily)
    if x <= 0: return -1
    return int(x+1)

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

samSolved = difference + x*samDaily 
kellySolved = x*kellyDaily

我们需要为kellySolved>;找到正整数的最小值x;萨姆解决了

x*kellyDaily > difference + x*samDaily
x > (samDaily-kellyDaily)/difference

Pthon代码:

def days_needed(kellyDaily, samDaily, difference):
    x = (samDaily-kellyDaily)/difference
    if x <= 0: return -1
    return int(x+1)

相关问题 更多 >

    热门问题