牛客题解 | 小东分苹果
1.牛客题解 | 寻宝2.牛客题解 | 寻找Coder3.牛客题解 | 寻找丑数4.牛客题解 | 寻找合法字符串5.牛客题解 | 寻找奇数6.牛客题解 | 寻找子串7.牛客题解 | 将满二叉树转换为求和树8.牛客题解 | 小A最多会新认识的多少人9.牛客题解 | 小Q的排序
10.牛客题解 | 小东分苹果
11.牛客题解 | 小招喵跑步12.牛客题解 | 小明卖食物13.牛客题解 | 小明的字符串14.牛客题解 | 小易喜欢的单词15.牛客题解 | 小易喜欢的数列16.牛客题解 | 小易的字典17.牛客题解 | 小游戏18.牛客题解 | 小熊吃糖19.牛客题解 | 小球的距离20.牛客题解 | 小米Git21.牛客题解 | 小米大礼包22.牛客题解 | 山寨金闪闪23.牛客题解 | 工作方案24.牛客题解 | 左右最值最大差25.牛客题解 | 带权的DAG节点排序26.牛客题解 | 平均年龄27.牛客题解 | 平方串28.牛客题解 | 年会抢玩偶游戏29.牛客题解 | 年终奖30.牛客题解 | 幸运子序列31.牛客题解 | 幸运数32.牛客题解 | 幸运数字33.牛客题解 | 幸运的袋子34.牛客题解 | 幼儿园分班35.牛客题解 | 序列合并36.牛客题解 | 序列找数37.牛客题解 | 序列操作38.牛客题解 | 序列模式匹配39.牛客题解 | 建物流中转站40.牛客题解 | 异或41.牛客题解 | 彩色宝石项链42.牛客题解 | 彩色的砖块43.牛客题解 | 彩色的砖块_144.牛客题解 | 循环数比较45.牛客题解 | 循环数比较_146.牛客题解 | 微信红包47.牛客题解 | 怪数48.牛客题解 | 懂二进制49.牛客题解 | 手串50.牛客题解 | 手套51.牛客题解 | 手机号52.牛客题解 | 扎金花53.牛客题解 | 扑克牌四则运算54.牛客题解 | 打印二维数组55.牛客题解 | 打印回形数56.牛客题解 | 扭蛋机57.牛客题解 | 找“异数”58.牛客题解 | 找出单向链表中的一个节点,该节点到尾指针的距离为K59.牛客题解 | 找出重复的数字60.牛客题解 | 找到最近的NPC61.牛客题解 | 找缺失数字62.牛客题解 | 找零63.牛客题解 | 折纸问题64.牛客题解 | 抛小球65.牛客题解 | 抽牌66.牛客题解 | 拍照队形67.牛客题解 | 拓扑结构相同子树68.牛客题解 | 招聘会小礼品69.牛客题解 | 拜访70.牛客题解 | 括号匹配方案71.牛客题解 | 括号匹配深度72.牛客题解 | 括号配对问题73.牛客题解 | 拼凑三角形74.牛客题解 | 拼凑正方形75.牛客题解 | 拼凑硬币76.牛客题解 | 拼凑面额77.牛客题解 | 挑选镇长78.牛客题解 | 换乘79.牛客题解 | 换零钱80.牛客题解 | 排序81.牛客题解 | 排序次数82.牛客题解 | 提取优惠券码83.牛客题解 | 搬圆桌84.牛客题解 | 搭积木85.牛客题解 | 操作序列86.牛客题解 | 操作序列_187.牛客题解 | 改考卷88.牛客题解 | 数三角形89.牛客题解 | 数位重排90.牛客题解 | 数列91.牛客题解 | 数列的和92.牛客题解 | 数列计算93.牛客题解 | 数列还原94.牛客题解 | 数字和为sum的方法数95.牛客题解 | 数字字符96.牛客题解 | 数字序列97.牛客题解 | 数字构造98.牛客题解 | 数字游戏99.牛客题解 | 数字游戏_1100.牛客题解 | 数字的情绪题目
解题思路
这是一个递归解法的苹果分配问题。关键点:
-
递归函数定义:
- getInitial(n, k, x):表示还剩 头熊,当前苹果数为 时是否可行
- :总熊数
- :剩余熊数
- :当前苹果数
-
递归条件:
- 基础情况:k=0时返回true,表示所有熊都分完了
- 剪枝条件:(x-1)%n != 0时返回false,表示不能均分
- 递归:检查下一头熊分苹果的情况
-
主函数:
- 从1开始枚举可能的初始苹果数
- 找到第一个满足条件的数即为答案
代码
class Apples {
public:
bool getInitial(int n, int k, int x) {
if(k == 0) return true;
if((x-1) % n != 0) return false;
return getInitial(n, k-1, (x-1)*(n-1)/n);
}
int getInitial(int n) {
for(int i = 1; i <= INT_MAX; i++) {
if(getInitial(n, n, i)) {
return i;
}
}
return 0;
}
};
import java.util.*;
public class Apples {
public boolean getInitial(int n, int k, int x) {
if(k == 0) return true;
if((x-1) % n != 0) return false;
return getInitial(n, k-1, (x-1)*(n-1)/n);
}
public int getInitial(int n) {
for(int i = 1; i <= Integer.MAX_VALUE; i++) {
if(getInitial(n, n, i)) {
return i;
}
}
return 0;
}
}
# -*- coding:utf-8 -*-
class Apples:
def check(self, n, k, x):
if k == 0:
return True
if (x-1) % n != 0:
return False
return self.check(n, k-1, (x-1)*(n-1)//n)
def getInitial(self, n):
i = 1
while True:
if self.check(n, n, i):
return i
i += 1
算法及复杂度
- 算法:递归 + 枚举
- 时间复杂度:,其中 为最小解的大小,每个数需要递归 次
- 空间复杂度:,递归栈的深度为n
合集:
牛客笔试大厂真题题解3
分类:
牛客笔试大厂真题题解3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】