校招算法笔面试 | 校招笔面试真题-买苹果

题目

题目链接

解题思路

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

  1. 只能买6个装和8个装的包装
  2. 要求总数正好是 n n n
  3. 在满足条件的情况下,购买最少的袋子
  4. 如果无法凑出正好 n n n 个,返回 -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个装的袋子凑齐剩余数量。
  • 时间复杂度: O ( n / 8 ) \mathcal{O}(n/8) O(n/8),其中n是目标苹果数。
  • 空间复杂度: O ( 1 ) \mathcal{O}(1) O(1),只使用了常数额外空间。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值