解题思路
这是一道简单的数学问题,需要用6个和8个的组合来凑出目标数 。关键点是:
- 只能买6个装和8个装的包装
- 要求总数正好是
个
- 在满足条件的情况下,购买最少的袋子
- 如果无法凑出正好
个,返回 -1
解题步骤:
- 优先考虑使用8个装的袋子(因为8个装可以减少袋子总数)
- 对于剩余的苹果,尝试用6个装的袋子凑齐
- 如果无法正好凑齐,则减少8个装的数量,继续尝试
代码
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int result = -1;
// 尝试使用不同数量的8个装
for(int i = n/8; i >= 0; i--) {
int remain = n - i * 8;
// 如果剩余数量可以被6整除
if(remain >= 0 && remain % 6 == 0) {
result = i + remain/6;
break;
}
}
cout << result << endl;
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int result = -1;
// 尝试使用不同数量的8个装
for(int i = n/8; i >= 0; i--) {
int remain = n - i * 8;
// 如果剩余数量可以被6整除
if(remain >= 0 && remain % 6 == 0) {
result = i + remain/6;
break;
}
}
System.out.println(result);
}
}
n = int(input())
result = -1
# 尝试使用不同数量的8个装
for i in range(n//8, -1, -1):
remain = n - i * 8
# 如果剩余数量可以被6整除
if remain >= 0 and remain % 6 == 0:
result = i + remain//6
break
print(result)
算法及复杂度
- 算法:贪心算法。优先使用8个装的袋子,然后尝试用6个装的袋子凑齐剩余数量。
- 时间复杂度:
,其中n是目标苹果数。
- 空间复杂度:
,只使用了常数额外空间。