首页 > 试题广场 >

买橘子

[编程题]买橘子
  • 热度指数: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 优化题面文本与格式;补充一组样例。新增若干组测试数据。
头像 bao_hu_yuan_zhang
发表于 2024-03-18 17:12:51
#include <iostream> using namespace std; int main() { int i=0; int n=0; cin>>n; int m=n/8; for(i=m;i>=0;i--) 展开全文
头像 BraveCoder
发表于 2025-08-26 19:51:54
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n 展开全文
头像 橘子酒_
发表于 2025-07-01 07:41:20
int main() { int big_max;//最多使用大袋子的数量 int chengzi;//目标橙子数量 int small_bag=0;//初始化小袋子数量为0 scanf("%d",&chengzi); big_ma 展开全文
头像 等一个offer的三文鱼很谦虚
发表于 2025-11-06 19:38:16
#include <iostream> using namespace std; int n,ans=1e8; void dfs(int x,int k){//x为当前数目,k为袋数 if(x>n)return ;//超出直接停止 if(x==n){ a 展开全文
头像 爱喝伏特加的琴
发表于 2025-07-19 10:35:31
#include <bits/stdc++.h> using namespace std; #define N 100000+5 typedef long long ll; ll num=0,mini=0; int main() { int n;cin>>n;//6 展开全文
头像 牛客638983168号
发表于 2025-11-20 16:51:49
解题思路: 首先先判断不能买的条件,因为偶数和偶数组合得到的是偶数,所以奇数是不能买的,最少购买是6或8或 12个,所以在0到14区间非6非8非12不能买 因为要用最少的袋子,所以我们要尽可能的使用8个袋子去装 所以我们创建count来表示需要的8个橙子袋子数目,用e来表示对8取余的余数 当 展开全文
头像 牛客171874905号
发表于 2025-11-10 23:43:33
#include <iostream> using namespace std; int main() { int n; cin>>n; cout<<((n<6||n%2!=0||n==10)?-1:(n+6)/8)<< 展开全文
头像 有俩把刷子
发表于 2025-10-22 17:17:44
// 从最大可能的 8 个装袋数(n / 8)开始递减尝试,计算剩余橙子数是否能被 6 整除,第一个符合条件的组合即为最少袋数(因优先用大包装,总袋数最少)。 const rl = require("readline").createInterface({ input: proc 展开全文
头像 redxinwei
发表于 2025-12-20 21:53:22
n=int(input()) mina=-1 max_eight=n//8 for i in range(max_eight,-1,-1): r=n-8*i if r%6==0: mina=i+r/6 break print(int(mina))
头像 Banana1223
发表于 2025-09-03 22:22:50
n = int(input()) rs = [] for x in range(n//8 + 1): for y in range((n-8*x)//6 + 1): if x*8 + y*6 == n: r = x+y rs. 展开全文

问题信息

上传者:小小
难度:
50条回答 5369浏览

热门推荐

通过挑战的用户

查看代码
买橘子