题目描述
如下是网易17年秋招编程题里的题目
小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。
输入描述:
输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果
输出描述:
输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1
输入例子:
20
输出例子:
3
思路及Python实现
读完题目,想必很容易知道,要想袋子数越少,肯定是每袋能装8个的越多越好,只要抓住这点后面的实现就比较容易了。首先有一个方程是要基础的:8*i + 6*j = n(其中i为大袋数,j为小袋数,n为苹果数)。
先假设袋子数最少为:
min = n/8
然后逐次减少,判断剩下的苹果数是否能用小袋(装6个)恰好装完:
for i in range(min,-1,-1):
if (n-8*i) % 6 == 0:
succ += 1
j = (n-8*i)/6
break
最后,判断一下,如能恰好装完,就输出i + j;否则输出-1。
#encoding:utf-8
def func(n):
min = n/8
succ = 0
for i in range(min,-1,-1):
if (n-8*i) % 6 == 0:
succ += 1
j = (n-8*i)/6
break
if succ > 0:result = i + j
else:result = -1
return result
n = input()
print func(n)
更多样例
更多样例请看这里哟:http://blog.youkuaiyun.com/buracag_mc/article/category/6817874