首页 > 试题广场 >

买橘子

[编程题]买橘子
  • 热度指数:11561 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}小明去附近的水果店买橙子。水果商贩只提供整袋购买,有每袋 6 个和每袋 8 个的包装(包装不可拆分)。可是小明只想购买恰好 n 个橙子,并且尽量少的袋数方便携带,请你帮他计算一下最少需要购买的袋数。如果不能购买恰好 n 个橙子,小明将不会购买,此时输出 -1

输入描述:
\hspace{15pt}在一行上输入一个整数 n \left(1 \leqq n \leqq 10^5\right),表示小明想要购买的橙子数量。


输出描述:
\hspace{15pt}如果不能通过购买整袋橙子凑出 n 个橙子,则输出 -1;否则,输出一个整数表示最少需要购买的袋数。
示例1

输入

20

输出

3
示例2

输入

7

输出

-1

备注:
本题已于下方时间节点更新,请注意题解时效性:
1. 2025-06-25 优化题面文本与格式,修正为单组输入。
2. 2025-08-07 优化题面文本与格式,扩大数据范围。
3. 2025-11-19 优化题面文本与格式;补充一组样例。新增若干组测试数据。

a=int(input())

def juzi(a):

m=a//24*3

n=a%24

ifn==6or n==8:

    returnm+1

elif n==12or n==14or n==16:

    returnm+2

elif n==18or n==20or n==22:

    returnm+3

elif n==0:

    returnm

else:

    return-1

print(juzi(a))六和八的最小公倍数是24。大于24的,就先来三个8。二十四以内的就没几个。

发表于 2025-07-30 23:40:17 回复(0)
n%8 取余是奇数,直接输出 -1
2+2*8 = 3*6
4+8 = 2*6
6 = 1*6
if __name__=='__main__':
    n = int(input().strip())
    ans = n//8
    k = n%8
    if k&1==1:
        print(-1)
    elif k==2:
        if ans >=2:
            ans += 1
            print(ans)
        else:
            print(-1)
    else:
        print(ans+1)


发表于 2019-09-10 14:35:47 回复(0)
import sys
n=int(sys.stdin.readline())
a=int(n/8)+1
res=[]
for i in range(a):
    if (n-8*i)%6==0:
        res.append(int(i+(n-8*i)/6))
if len(res)==0:
    print(-1)
else:
    res=sorted(res)
    print(res[0])
发表于 2019-03-19 20:22:54 回复(0)
n = int(input())
max_eig = n//8 answer = False for i in range(max_eig):
    m = n-(max_eig-i)*8   if m%6 == 0:
        max_six = m/6   max_eig = max_eig-i
        answer = True  break  if answer:  print(int(max_six+max_eig))  else:  print(-1)

发表于 2019-03-14 18:59:01 回复(0)

问题信息

上传者:小小
难度:
5条回答 5370浏览

热门推荐

通过挑战的用户

查看代码
买橘子