创新工厂面试题详解 我的代码

创新工厂面试题详解:共打了多少鱼 -- 正解 递归求解法 今天看了一篇博文创新工场面试题详解题目:abcde五人打渔,打完睡觉,a先醒来,扔掉1条鱼,把剩下的均分成5分,拿一份走了;b再醒来,也扔掉1条,把剩下的均分成5份,拿一份走了;然后cde都按上面的方法取鱼。问他们一共打了多少条鱼?       许多小朋友都参与其中,挺有意思, 阅读详情

原贴 http://blog.youkuaiyun.com/nokiaguy/article/details/6800209#cpp

 运行结果:

1 people caught 2 fishes
        People[00] took 1 fishes within total 2 fishes


2 people caught 7 fishes
        People[00] took 3 fishes within total 7 fishes
        People[01] took 1 fishes within total 3 fishes


3 people caught 25 fishes
        People[00] took 8 fishes within total 25 fishes
        People[01] took 5 fishes within total 16 fishes
        People[02] took 3 fishes within total 10 fishes


4 people caught 253 fishes
        People[00] took 63 fishes within total 253 fishes
        People[01] took 47 fishes within total 189 fishes
        People[02] took 35 fishes within total 141 fishes
        People[03] took 26 fishes within total 105 fishes


5 people caught 3121 fishes
        People[00] took 624 fishes within total 3121 fishes
        People[01] took 499 fishes within total 2496 fishes
        People[02] took 399 fishes within total 1996 fishes
        People[03] took 319 fishes within total 1596 fishes
        People[04] took 255 fishes within total 1276 fishes


6 people caught 46651 fishes
        People[00] took 7775 fishes within total 46651 fishes
        People[01] took 6479 fishes within total 38875 fishes
        People[02] took 5399 fishes within total 32395 fishes
        People[03] took 4499 fishes within total 26995 fishes
        People[04] took 3749 fishes within total 22495 fishes
        People[05] took 3124 fishes within total 18745 fishes


7 people caught 823537 fishes
        People[00] took 117648 fishes within total 823537 fishes
        People[01] took 100841 fishes within total 705888 fishes
        People[02] took 86435 fishes within total 605046 fishes
        People[03] took 74087 fishes within total 518610 fishes
        People[04] took 63503 fishes within total 444522 fishes
        People[05] took 54431 fishes within total 381018 fishes
        People[06] took 46655 fishes within total 326586 fishes


Press any key to continue . . .

 代码:

// Fish.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <assert.h>

#include <vector>
using std::vector;


static bool IsExpected(int Fish, int People)
{
	if (Fish <= 1)
	{
		return false;
	}
	return ((Fish - 1) % People == 0);
}

//-1 means fish count error 
static int GetNextFish(int Fish, int People)
{
	assert(IsExpected(Fish, People));
	int NextFish = (People - 1) * (Fish - 1) / People;
	return (IsExpected(NextFish, People)? NextFish : -1);
}

static int GetAnValiadFish(int kk, int People)
{
	return (People * kk + 1);
}

static bool TestValidFishCount(int Fish, int People, vector<int>& vecFish)
{
	vecFish.clear();

	if (!IsExpected(Fish, People))
	{
		return false;
	}
	vecFish.push_back(Fish);

	bool bret = true;
	for (int ii=1; ii<People; ++ii)
	{
		Fish = GetNextFish(Fish, People);
		if (Fish < 0)
		{
			bret = false;
			break;
		}
		vecFish.push_back(Fish);
	}

	return bret;
}

static void PrintResults(int People, int Fish, const vector<int>& vecFish)
{
	_ftprintf_s(stdout, L"%d people caught %d fishes" L"\r\n", People, Fish);
	for (size_t ii=0; ii<vecFish.size(); ++ii)
	{
		_ftprintf_s(stdout, L"\t" L"People[%02d] " L"took %d fishes within total %d fishes" L"\r\n", ii, (vecFish[ii]-1)/People, vecFish[ii]);
		
	}
	_ftprintf_s(stdout, L"\r\n\r\n");
}

static int GetTotalFish(int People, vector<int>& vecFish)
{
	int kk = 1;
	int Fish = 0;
	for (;;)
	{
		Fish = GetAnValiadFish(kk, People);
		if (TestValidFishCount(Fish, People, vecFish))
		{
			break;
		}
		++kk;
	}
	return Fish;
}

int _tmain(int argc, _TCHAR* argv[])
{
	for (int People = 1; People < 8; ++People)
	{
		vector<int> vecFish;
		int Fish = GetTotalFish(People, vecFish);
		PrintResults(People, Fish, vecFish);
	}

	return 0;
}


 

【高频考点精讲】JavaScript中的工厂模式:从简单工厂到抽象工厂 🧑‍🏫:全栈老李📅:2025 年 5 月🧑‍💻:前端初学者、进阶开发者🚀:本文由全栈老李原创,转载请注明出处。今天咱们聊聊JavaScript设计模式中的工厂模式。作为前端工程师,你可能每天都在用工厂模式却浑然不觉。就像全栈老李我当年第一次听说"工厂模式"时一脸懵逼,后来才发现原来早就在用jQuery的$()这种工厂函数了。。就像你去麦当劳点餐,不需要知道汉堡是怎么做的,只要告诉收银员"我要一个巨无霸",厨房就会给你生产出来。工厂模式就是代码世界的厨房。 阅读详情

相关推荐

Hermes V0.10.0:官方UI几乎无Bug版

如果你还在观望Hermes,现在可能是最好的入局时机。 因为网页端来了,门槛降到了最低。 如果你已经是Hermes用户,升级就对了。 因为0.9.0的更新,值得一试。

weixin_66295112的博客 2046

创新工厂面试题详解:共打了多少鱼

最近看到一个创新工厂的面试题,很有意思,下面给出算法实现(Java代码)。如果哪位有更好的算法,请跟贴。        abcde五人打渔,打完睡觉,a先醒来,扔掉1条鱼,把剩下的分成5分,拿一份走了;b再醒来,也扔掉1条,把剩下的分成5份,拿一份走了;然后cde都按上面的方法取鱼。问他们一共打了多少条鱼,写程序和算法 共打了多少条鱼的结果有很多。但求最少打的鱼的结果是3121条鱼

1110

智能车实战——极速越野组GPS与惯导融合定位导航全解析

本文深入解析了智能车极速越野组中GPS与惯导模块的融合定位导航技术。通过对比GPS的全局定位与惯导的高频姿态感知,详细阐述了如何利用MM32SPN27主控,将两者数据融合以实现精准、实时的车辆控制。内容涵盖硬件选型、软件数据处理、PID控制及系统调试等实战环节,为智能车开发者提供了一套完整的解决方案。

pz8901234的博客 1204

工厂模式面试题

格式说明:使用Markdown标题(#)、列表(-)、代码块(```)增强可读性,便于快速浏览。- 实现:`FileLogger`、`DbLogger`、`ConsoleLogger`。2. 抽象工厂“产品族”误区:混淆产品族(一组相关产品)与产品等级(同类不同实现)。- 定义 `Logger` 接口(`log(message)`)。- 适用场景:产品类型固定、无需频繁扩展(如日志处理器)。- 定义:创建一组相关或依赖的产品族(如跨平台UI组件)。- 缺点:违反开闭原则(新增产品需修改工厂类)。

你是人间四月天 492

IoT 平台架构全景图:从设备到 AI 的完整技术体系深度解析

随着物联网设备规模进入百万级时代,IoT 平台架构已经从简单的设备接入系统演变为完整的数据平台。本文从系统架构师视角,深度解析 IoT 平台的完整技术体系,包括设备接入、MQTT 通信、消息流平台、数据平台与 AI 决策系统,并结合主流云平台实践,构建从设备到 AI 的完整 AIoT 架构认知。

moton2017的博客 856

ADRC自抗扰控制:工程抗扰“黑科技”,附C代码实战!

自抗扰控制(ADRC)是一种革新性的强鲁棒控制策略,通过主动估计和补偿系统扰动,无需精确数学模型即可实现优异控制性能。本文详细解析ADRC三大核心组件:跟踪微分器(TD)实现指令柔化,扩张状态观测器(ESO)实时估计总扰动,非线性状态反馈(NLSEF)完成动态补偿。针对二阶系统,文章提供完整的参数设计方法和C语言实现框架,包括关键函数fhan和fal的代码实现。ADRC将复杂对象"线性化"为积分器串联系统,显著提升抗扰能力,特别适用于电机控制、飞行器姿态等存在模型不确定性和强干扰的场景。

技术工作者 1736

Java工厂模式详解

工厂模式: 设计模式是源于生活,人类社会生产从原始的集体生产、私有化、作坊、手工工厂、流水线工程一路发展过来,工厂生产模式成为效率最高的方式。 那么在软件设计中也参考了这种方式: 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就...

chengqiaochong3699的博客 1341

YonSuite如何新增用户并分配角色角色授权图文教程

用友YonSuite产品基础教学

ct341688的博客 619

创新工厂的面试题

最近看到一个创新工厂的面试题,很有意思,下面给出算法实现(Java代码)。如果哪位有更好的算法,请跟贴。        abcde五人打渔,打完睡觉,a先醒来,扔掉1条鱼,把剩下的分成5分,拿一份走了;b再醒来,也扔掉1条,把剩下的分成5份,拿一份走了;然后cde都按上面的方法取鱼。问他们一共打了多少条鱼,写程序和算法 共打了多少条鱼的结果有很多。但求最少打的鱼的结

我是程序员 1032

Cadence PCB仿真 使用Allegro PCB SI为BRD文件创建通用型IBIS模型的方法图文教程

本文简单介绍使用Allegro PCB SI软件为BRD PCB设计文件中的元器件创建IBIS模型的方法。

fydar的博客 2169

Autosar Configuration(十四)SomeIP之配置SoAd

本文主要介绍SomeIp协议栈中的SoAd在Configurator中的详细配置

king110108的专栏 2600

2024年Java最全硬核解读工厂模式,结合实际源码架构把工厂模式玩出花儿来!(1),最新java面试题及答案

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。Set

2301_82241647的博客 913

Ubuntu Rtx3090 Cuda11.7 安装 pytorch3d

pytorch ubuntu pytorch3d 安装

G果的博客 2273

@工厂模式详解及在项目中的使用

它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法、抽象工厂模式策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的的客户。这个策略模式的定义是不是有点抽象呢?通俗易懂的比喻:假设你跟不同性格类型的小姐姐约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去逛街买买买最合适。

weixin_49329785的博客 1317

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

面试题工厂模式(简单工厂、工厂方法、抽象工厂)写法与区别

面试题设计模式工厂模式 提到工厂模式大多数码农都不陌生毕竟这中设计模式我们比较常见许多开源框架中也经常出现因此面试得时候一般也会问问。 工厂模式为三种: 1、简单工厂 2、工厂方法 3、抽象工厂 工厂方法、抽象工厂方法区别 ...

aiailingfei的博客 1765

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java 面试题 —— 简单工厂、工厂方法、抽象工厂的区别

Java 面试题 —— 简单工厂、工厂方法、抽象工厂的区别 1、简单工厂模式 2、工厂(方法)模式 3、抽象工厂模式 4、区别

weixin_51123079的博客 968

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java三种工厂模式:简单工厂、工厂方法、抽象工厂

java设计模式,工厂模式、简单工程、工厂方法、抽象工厂

xiaoddt的博客 1万+

2021-05-18 C#.NET面试题 工厂模式,简单工厂模式,抽象工厂模式三者有什么区别

工厂模式,简单工厂模式,抽象工厂模式三者有什么区别 工厂模式,也叫做说虚构造器,在简单工厂中间插入了一个具体产品工厂,这个工厂知道产品构造时候的具体细节,而简单工厂模式的产品具体构造细节是在一个个if/else分支,或者在switch/case分支里面的。工厂模式的好处就在于将工厂和产品之间的耦合降低,将具体产品的构造过程放在了具体工厂类里面。在以后扩展产品的时候方便很多,只需要添加一个工厂类,一个产品类,就能方便的添加产品,而不需要修改原有的代码。而在简单工厂中,如果要增加一个产品,则需要修改工厂类,增加

微软MVP Eleven 7万+

面试题:说说工厂模式和单例模式吧

工厂模式 1、什么是工厂模式? 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程(new 关键字和具体的构造器)隐藏起来。用一个工厂方法来替代,对外提供的只是一个工厂方法,达到提高灵活性的目的。 2、有什么作用 1.隐藏了new关键字和构造器 2.降低了这个对象与别的类之间的耦合度,提高了程序的可扩展性。 原因:当子类被别的类替代,或者构造器的参数发生变化的时候,只需改动工厂方法内的new即可,改动量降到了最低,直接用new关键字的话,需要改动的地方就很多了 ,图示如下 3.把对象的设

CSY的博客 1324

详解单例模式和工厂模式(面试)

1. 什么是设计模式 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路,他不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳定性以及安全性的解决方案。 1995年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了23种设计模式,从此树立了软件设计模式领域的里程碑,人称[GoF设计模式]。 2. 学习设计模式的意义 设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继

qq_35254085的博客 1872

Android设计模式系列--工厂方法模式,android面试题2024高级

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。因为这种情况下,我们往往需要的是马上生产子类,getConnection方法往往是静态的,所以简单工厂,也叫静态工厂方法。真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。//同理,我们可以创建另外类似的工厂,生产某种专门的线程,非常容易扩展。阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

weixin_58085973的博客 545
上一篇: How to disable optimization when building WRK for easily debug?
smartgotodo
博客等级 码龄20年 61粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值