[問題] 小於5的倍數即以5的倍數計

看板Python作者 (哥)時間8年前 (2017/03/31 22:48), 編輯推噓11(11020)
留言31則, 12人參與, 最新討論串1/1
小於某數的倍數即以讓倍數計,的最簡表示各位會想到什麼呢? 例如 12 因為 > 5*2, <5*3 所以取 15 16 取 20… 目前我用 if else 花了四行,請問這有可能用一個數學式或 python式來表示嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.216.9 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1490971683.A.8F4.html

03/31 22:50, , 1F
output = 5 * ((input % 5) + 1 )
03/31 22:50, 1F

03/31 22:51, , 2F
啊好像不是mod應該要用商
03/31 22:51, 2F

03/31 22:53, , 3F
output = 5 * ((input / 5) + 1 ) 不考慮5的倍數?
03/31 22:53, 3F

03/31 23:01, , 4F
lambda x: x - x%5 + (5 if x%5 else 0)
03/31 23:01, 4F

03/31 23:02, , 5F
改樓上的 (input % 5 > 0) ? 5*((input/5)+1) : input
03/31 23:02, 5F

03/31 23:03, , 6F
上面的結果,如果 input == 15 結果是 20 耶?
03/31 23:03, 6F

03/31 23:03, , 7F
我說的樓上是 Mchord,大家回太快了。
03/31 23:03, 7F

03/31 23:04, , 8F
啊~~乾尬了 我發現我寫的是c++ XD
03/31 23:04, 8F

03/31 23:06, , 9F
python ok 的
03/31 23:06, 9F

03/31 23:07, , 10F
我一直在想數學上是不是有什麼「最小XX數的」。好像大家都
03/31 23:07, 10F

03/31 23:07, , 11F
也是用if...else?
03/31 23:07, 11F

03/31 23:08, , 12F
a = 5*((input/5)+1) if input%5 >0 else input
03/31 23:08, 12F

03/31 23:13, , 13F
用math的ceil函數吧?
03/31 23:13, 13F

03/31 23:14, , 14F
(x+4)//5*5
03/31 23:14, 14F

03/31 23:17, , 15F
當x=5k, (5k+4)//5*5 = 5k = x
03/31 23:17, 15F

03/31 23:18, , 16F
當x=5k+1 or 5k+2 or 5k+4, 5k+5 <= (x+4) <= 5k+9
03/31 23:18, 16F

03/31 23:20, , 17F
...
03/31 23:20, 17F

03/31 23:20, , 18F
所以 (x+4)//5*5 = 5(k+1). 正好是你要的
03/31 23:20, 18F

04/01 11:57, , 19F
我會寫成(input+n-1)/n*n 如果input只有整數的話
04/01 11:57, 19F

04/01 11:59, , 20F
CodesFights golfing經驗得道的結果
04/01 11:59, 20F

04/01 12:02, , 21F
耶 剛好跟樓上一樣 哈哈沒認真看
04/01 12:02, 21F

04/01 18:19, , 22F
a = lambda x:int((x - 1)/5+1)*5
04/01 18:19, 22F

04/01 18:19, , 23F
這樣應該可以...
04/01 18:19, 23F

04/02 11:02, , 24F
正整數的話 f1=lambda x,n:x+n-1-((x-1)%n); f1(x,5). 多
04/02 11:02, 24F

04/02 11:02, , 25F
了一些加減法,但只用到一次除法. 負整數和浮點數要另外考慮
04/02 11:02, 25F

04/02 11:02, , 26F
.
04/02 11:02, 26F

04/02 15:28, , 27F
ouput = (input +4) - (input + 4) % 5
04/02 15:28, 27F

04/02 22:55, , 28F
很好奇數理好的人是如何思考的?有人可以提示思考流程嗎
04/02 22:55, 28F

04/02 22:55, , 29F
04/02 22:55, 29F

04/03 02:42, , 30F
除五套高斯函數加一?
04/03 02:42, 30F

04/03 09:37, , 31F
f = lambda x: int(math.ceil(x/5.0)) * 5
04/03 09:37, 31F
文章代碼(AID): #1OtcmZZq (Python)
文章代碼(AID): #1OtcmZZq (Python)