最近看到一个创新工厂的面试题,很有意思,下面给出算法实现(Java代码)。如果哪位有更好的算法,请跟贴。
abcde五人打渔,打完睡觉,a先醒来,扔掉1条鱼,把剩下的分成5分,拿一份走了;b再醒来,也扔掉1条,把剩下的分成5份,拿一份走了;然后cde都按上面的方法取鱼。问他们一共打了多少条鱼,写程序和算法
共打了多少条鱼的结果有很多。但求最少打的鱼的结果是3121条鱼(应该找这5个人问问,用什么工具打了这么多条鱼)
大家可以先用计算器验证一下3121是否正确。
a开始拿鱼: (3121 - 1) / 5 = 625
同理,bcde分别获得的鱼数(不包括其扔掉的鱼)b:499 c:399 d:319e:255
这道题最简单的方法就是枚举。从最小值开始,先看看代码(Java实现)。
public class Test
{
public static void main(String[] args)
{
// 分别保存a至e获取的鱼数(为了方便,包括其扔掉的鱼)
int[] everybody_fish = new int[5];
//临时数组,保存当前鱼数减1后除5的余数,只有都为0,才满足条件
int[] temp = new int[5];
// 从1扫描到10000
for (int x = 1; x <= 10000; x++)
{
//当前已被取走多少鱼(包括被扔的鱼)
int sum = 0;
int i = 0;
//计算abcde各获取的鱼数
for (i = 0; i < everybody_fish.length; i++)
{
temp[i] = (x - 1 - sum) % everybody_fish.length;
// 只要有一个人不能平均分配剩余的鱼,就不满足条件
if (temp[i] != 0)
break;
everybody_fish[i] = (x - 1 - sum) / everybody_fish.length + 1;
sum += everybody_fish[i];
}
//for循环正党结束,满足条件,输出相应的值。
if (i == everybody_fish.length)
{
System.out.print("共钓了" + x + "条鱼 ");
for (i = 0; i < everybody_fish.length; i++)
{
System.out.print((char) ('a' + i) + ":"
+ (everybody_fish[i] - 1) + " ");
}
System.out.print("最后剩余" + (x - sum) + "条鱼");
System.out.println("扔了" + everybody_fish.length + "条鱼");
}
}
}
}
运行上面的代码,会输出如下三行信息
共钓了3121条鱼a:624 b:499 c:399d:319 e:255 最后剩余1020条鱼 扔了5条鱼
共钓了6246条鱼a:1249 b:999 c:799d:639 e:511 最后剩余2044条鱼 扔了5条鱼
共钓了9371条鱼a:1874 b:1499 c:1199d:959 e:767 最后剩余3068条鱼 扔了5条鱼
在10000以内只有三个数满足这个条件。上面的代码是通用的,如将两个数组的长度改为6,将10000改成50000,会输出如下信息。
共钓了46651条鱼a:7775 b:6479 c:5399d:4499 e:3749 f:3124最后剩余15620条鱼 扔了6条鱼
也就是说一共6个人。每个人也是先扔一条鱼,然后再将剩余的鱼6等分,取走一份。 在50000以内只有46651满足这个条件。
在本题中只有如下的代码是核心算法,其他的都是枚举和输出结果的代码。
for (i = 0; i < everybody_fish.length; i++)
{
temp[i] = (x -1 - sum) % everybody_fish.length;
// 只要有一个人不能平均分配剩余的鱼,就不满足条件
if (temp[i] !=0)
break;
everybody_fish[i] = (x - 1 - sum) / everybody_fish.length + 1;
sum +=everybody_fish[i];
}
相关推荐
AIGC 创业宝典:李开复的《创新工场讲 AI 课》 《创新工场讲 AI 课:从知识到实践》这本书是由创新工场 DeeCamp 委员会在 2021 年出版的,以 2019、2020 年 DeeCamp 训练营培训内容为基础,精选部分导师的授课课程...
【创新工场的笔试题】相关知识点详解 创新工场是一家知名的创业孵化平台,由李开复博士创办,致力于发掘并培养优秀的科技创业者。在招聘过程中,创新工场常常会设置笔试环节,以评估应聘者的综合素质和技术能力。...
2012创新工场笔试题
《创新工场2013校园招聘题:深入解析与经验分享》 创新工场,作为中国科技领域的知名孵化器和投资机构,每年的校园招聘都备受瞩目。2013年的招聘试题,不仅反映了创新工场所重视的能力和素质,也为后来的求职者提供...
从给定文件内容来看,知识点涵盖了数据结构、排序算法、计算机网络及操作系统原理等领域,下面将一一详细说明。 数据结构部分的知识点包括: 1. 树结构:树是一种非线性的数据结构,其中每个元素称为节点,有一个...
创新工场的笔试题,20130916 1、socket客户端调用的函数是()
对话创新工场CEO李开复:我没有诚信问题.docx
1. **基础语法**:Java100题、java40题和java38题可能包含了对Java基础语法的考察,如数据类型、变量、运算符、控制流(if、switch、for、while)、类与对象、封装、继承、多态等概念。 2. **面向对象**:作为面向...
创新工场迎来两周岁生日,作为一家由李开复博士于2021年9月7日创立的科技创新型企业孵化器与投资机构,它凭借独特的运作模式迅速崛起,成为创新投资界的佼佼者。在过去的两年中,创新工场已经完成了对超过2500个项目...
【SoLoMo模式详解】 SoLoMo,全称为社交(Social)、本地化(Local)和移动(Mobile)的结合,是互联网发展中的一个重要概念,由风险投资人约翰·杜尔在2011年提出。这一模式预示了互联网未来的发展趋势,尤其是在移动...
2015创新工场校招研发笔试题.pdf 2015小米校招技术类笔试题.pdf 360校园招聘2015届技术类笔试题.pdf 4399游戏2015校园招聘游戏开发类笔试题.pdf 人人网2015研发笔试卷B.pdf 人人网2015研发笔试卷C.pdf 搜狗2015校园...
创新工场是一家在中国极具影响力的创业孵化器和风险投资机构,由著名企业家李开复博士于2009年创立。它的核心目标是通过提供全方位的创业支持,帮助初创企业快速成长,推动科技创新的发展。 1. 创新工场概况:创新...
【创新工场校园招聘笔试题】是一份针对应聘者能力测试的题目集,涉及的知识点广泛,涵盖了计算机科学的基础知识,如面向对象编程、操作系统、数据结构与算法、字符串匹配和网络等多个方面。以下是这些题目所涵盖的...
总结来说,腾讯、创新工场、淘宝等知名IT公司所提出的面试题,不仅考查应聘者对基础算法和编程技能的掌握,也着重考察了在实际问题中灵活运用知识、解决复杂问题的能力。此外,能够快速学习新技术、应用到实际中,...
### 一、创新工场的发展历程 - **创始人**:李开复。 - **初创阶段**:创新工场在成立初期主要依靠李开复个人在业界的影响力和信任度来吸引人才和项目。 - **转型与发展**:随着时间的推移,创新工场逐渐转变为依靠...
【创新工场】是由李开复博士在2021年创立的一家专注于移动互联网、互联网和云计算领域的投资机构,旨在通过天使投资和培育创新产品及团队的方式推动行业发展。自成立以来,创新工场已成功投资了包括点心、魔图、豌豆...
创新工场是由李开复博士创办的一家专注于科技创业的创新平台,它在中国科技创业领域扮演了重要的角色。李开复以其个人影响力,特别是在新媒体领域的传播力,以及对青年人的指导力,使得创新工场在创立初期就备受关注...
创新工场李开复:创业者和投资人身份二选一.docx
这篇文档的标题是“软件开发笔试面试题总结精华版”,说明了这是一份汇集了软件开发领域面试和笔试常见问题的资源合集。这个合集来源于CSDN、PUDN等多个在线技术论坛,旨在帮助那些寻找IT开发职位的人准备面试。描述...