首页 > 试题广场 >

买橘子

[编程题]买橘子
  • 热度指数: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 优化题面文本与格式;补充一组样例。新增若干组测试数据。
include <stdio.h>
int main() {
    int a;
    scanf("%d",&a);
    int i,j;
    int ret=0;
    for(i=0;i<=20000;i++){
        for(j=0;j<=20000;j++){
            if(a==6*i+8*j){
                printf("%d",i+j);
                ret=1;
                goto end;  
            }
        }
    }
    end:
    if(ret==0){
        printf("-1");
    }
    return 0;
}
有没有什么方法可以当6*i+8*j>a时,就不再循环
发表于 2025-12-14 20:41:34 回复(0)
#include <stdio.h>

int main ()
{
int n=0;
scanf("%d",&n);
if(n%2==1 || n<6)
 printf("%d",-1);
 else if(n%8==0)
  printf("%d",n/8);
  else
  printf("%d",n/8+1);
return 0;
}
这就是C语言的简洁吗!!!!!!
发表于 2025-10-05 19:48:07 回复(0)
#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    for (int i = n / 8; i >= 0; i--)
    {
        int j  = n - 8 * i;
        if ( j % 6 == 0)
        {
            printf("%d\n", i + j / 6);
            return 0;
        }
    }
    printf("-1");
    return 0;
}
发表于 2025-07-19 21:23:00 回复(1)
#include <stdio.h>

int main() {
    int n, a = 0,b = 0,data;
    scanf("%d ", &n) ;
    if((n<1)||n>100000){return 0;}
    b = n/8;//最少购买的袋数,则8袋的越多越好
    while((b > 0)||(b == 0)){
        data = n - (8*b);
        a = data /6;
        if((data % 6) == 0){
            printf("%d\n",a+b);
            return 0;
        }
        b--;
    }
    printf("-1\n");
    return 0;
}
发表于 2025-06-26 10:55:43 回复(0)
#include<stdio.h>
int main()
{
	int n;
	while (scanf("%d",&n)!=EOF)
	{
		int i,j,min=100;
		for(i=0;i<=12;i++)
		{
			for(j=0;j<=16;j++)
			{
				if(8*i+6*j==n)
				{
					if((i+j)<min)
					{
						min=i+j;
					}
				}
			}
		}
		if(min==100) printf("-1\n");
		else printf("%d\n",min);
	}
    return 0;
}

发表于 2021-10-26 20:03:03 回复(0)

问题信息

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

热门推荐

通过挑战的用户

查看代码
买橘子