解题思路

这是一道简单的数学问题,需要用6个和8个的组合来凑出目标数 。关键点是:

  1. 只能买6个装和8个装的包装
  2. 要求总数正好是
  3. 在满足条件的情况下,购买最少的袋子
  4. 如果无法凑出正好 个,返回 -1

解题步骤:

  1. 优先考虑使用8个装的袋子(因为8个装可以减少袋子总数)
  2. 对于剩余的苹果,尝试用6个装的袋子凑齐
  3. 如果无法正好凑齐,则减少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是目标苹果数。
  • 空间复杂度:,只使用了常数额外空间。