问题标签 [puzzle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
4265 浏览

c# - 在多人之间分配美元金额的四舍五入问题

在代码中解决这个问题的最佳方法是什么?

问题是我有 2 美元的金额(称为罐子),需要分配给 3 人。每个人都会从两个罐子中获得特定的金额,并且费率必须大致相同。我不断遇到四舍五入的问题,即我的分配加起来太多或太少。

这是一个具体的例子:

锅#1 987,654.32
锅#2 123,456.78

第 1 人获得分配金额:345,678.89
第 2 人获得分配金额:460,599.73
第 3 人获得分配金额:304,832.48

我的逻辑如下(代码在c#中):

我得到的结果如下:

底池 #1,人 #1 = 307,270.13 底池
#1,人 #2 = 409,421.99 底池
#1,人 #3 = 270,962.21 底池
#1 总计 = 987,654.33(1 美分折扣)

底池 #2,人 #1 = 38,408.76 底池
#2,人 #2 = 51,177.74 底池
#2,人 #3 = 33,870.27 底池
#2 总计 = 123,456.77(1 美分折扣)

底池总数应与原始总数相匹配。

我想我可能遗漏了一些东西,或者可能需要采取额外的步骤。我认为我在正确的轨道上。

任何帮助将不胜感激。

0 投票
9 回答
3203 浏览

python - KenKen 谜题加法:REDUX A(修正)非递归算法

这个问题与 KenKen 拉丁方谜题的那些部分有关,这些部分要求您找到 ncells 数字的所有可能组合,其值为 x 使得 1 <= x <= maxval 和 x(1) + ... + x(ncells) =目标总和。在测试了几个更有希望的答案之后,我将把答案奖授予 Lennart Regebro,因为:

  1. 他的例行程序和我的一样快(+-5%),并且

  2. 他指出我原来的例程在某个地方有一个错误,这让我看到了它真正想要做什么。谢谢,伦纳特。

chrispy 贡献了一个似乎与 Lennart 相当的算法,但 5 小时后,sooo,第一个得到它。

备注:Alex Martelli 的基本递归算法是一个示例,它制作了所有可能的组合并将它们全部扔到筛子上,看看哪个穿过了孔。这种方法比 Lennart 或我的方法花费的时间要长 20 倍以上。(将输入提升到 max_val = 100,n_cells = 5,target_sum = 250,在我的盒子上是 18 秒 vs. 8+ 分钟。) 道德:不生成所有可能的组合是好的。

另一句话:Lennart 和我的例程以相同的顺序生成相同的答案。它们实际上是从不同角度看到的相同算法吗?我不知道。

我发生了什么事。如果您对答案进行排序,例如,以 (8,8,2,1,1) 开头并以 (4,4,4,4,4) 结尾(max_val=8, n_cells=5, target_sum =20),该系列形成一种“最慢下降”,第一个是“热”,最后一个是“冷”,中间有尽可能多的阶段。这与“信息熵”有关吗?观察它的正确指标是什么?是否有一种算法可以按热量的降序(或升序)产生组合?(据我所见,这个没有,尽管它在很短的时间内很接近,看着标准化的标准开发。)

这是 Python 例程:

0 投票
7 回答
7285 浏览

java - 为什么它不会从集合中删除?

这个bug花了我一段时间才找到...

考虑这种方法:

我使用非空哈希集调用该方法,但不会删除任何元素!

为什么会这样?

0 投票
1 回答
1249 浏览

java - 为什么我设置的不是 JFrame 布局?

JFrame如果我在with上设置布局setLayout然后用 with 检索它,getLayout那么我会得到一个不同的LayoutManager. 这里发生了什么??

但如果我替换JFrameJPanel我得到

0 投票
37 回答
213483 浏览

algorithm - 给定一些美元价值时如何找到所有硬币组合

我发现了一段我几个月前为面试准备而编写的代码。

根据我的评论,它试图解决这个问题:

给定一些以美分为单位的美元价值(例如 200 = 2 美元,1000 = 10 美元),找出构成美元价值的所有硬币组合。只允许使用便士 (1¢)、镍 (5¢)、10 美分 (10¢) 和 25 美分 (25¢)。

例如,如果给出 100,答案应该是:

我相信这可以通过迭代和递归的方式来解决。我的递归解决方案有很多错误,我想知道其他人将如何解决这个问题。这个问题的难点在于使其尽可能高效。

0 投票
3 回答
1862 浏览

algorithm - 创建十六进制洪水难题的算法

我正在创建一个益智游戏,虽然可以手动玩简单的关卡,但要通过计算机程序来解决更难的关卡。拼图是六角板上的洪水填充。您可以在这里尝试原型。

替代文字
(来源:hacker.org

以下是拼图的工作原理:通过从顶部选择一种颜色,您从左上角的图块开始执行泛洪填充。这逐渐将电路板转换为纯色。挑战是在一定数量的动作中做到这一点。

我已经创建了几个类似的谜题,关键是使用一种算法来生成在不知道它们是如何创建的情况下难以解决的板。例如,在这里我们可以通过反转洪水填充来生产板:从实心板向后工作,直到它被取消淹没。我们知道这需要多少步,并且可以将其设置为解决方案的下限。

我面临的问题是,当我尝试这种方法时,我的上限太高了。即使通过随机移动,在这个移动次数内解决难题也变得微不足道。

一种不是解决方案的方法是生成一个随机棋盘,然后对其进行优化求解并将其设置为目标。关键是要创建一个谜题,其中最佳解决它是 NP 时间或至少是一个硬 P。

所以我正在寻找的是一种算法,它可以生成极其坚硬的电路板,随着它们变得越来越大,解决它们成为一个严峻的挑战。

0 投票
8 回答
2194 浏览

binary - 十进制的 1x10^49 - 二进制位是多少,如何将其转换为二进制?

我遇到了一个在 URL 查询字符串中使用 50 位十进制整数 ID 的网站,这似乎有点过分。

最小的 50 位十进制数是1.0 x 10^49,也称为:

  1. 二进制表示包含多少位?
  2. 考虑到无符号 32 位整数或 64 位整数的范围限制,您将如何将如此大的十进制数转换为二进制数?

我只是出于纯粹的程序员好奇心而问——这不是大学问题、工作问题或面试难题!

0 投票
8 回答
6603 浏览

algorithm - 递归:将整数数组切割成相等和的两部分 - 一次通过

使用递归,找到一个索引,将数组分成两部分,使两部分的和相等。

切的意思是像用刀一样切。结果索引 <= 的所有单元格的总和必须等于索引 > 结果的所有单元格的总和。任何单元格都不能被遗漏或成为双方的一部分。

数组包含任意整数(即正数、负数和零)。

如果没有这样的索引返回-1

不允许分配堆对象。

您必须一次性完成。

您必须使用递归(即不能使用循环构造)。

可以是任何语言或伪代码。

忘了添加这个:你不能修改数组

0 投票
11 回答
28564 浏览

algorithm - 过桥拼图

四个人必须在晚上过桥。任何过桥的人,无论是一个人还是两个人,都必须随身携带手电筒。手电筒必须来回走动;它不能被抛出,等等。每个人以不同的速度行走。一个需要 1 分钟,另一个需要 2 分钟,另一个需要 5 分钟,最后 10 分钟。如果两个人一起穿过,他们必须以较慢的人的步伐走。没有什么花招——男人都在同一边开始,手电筒不能照远距离,没有人可以携带等等。

问题是他们能以最快的速度通过什么。我基本上是在寻找解决这类问题的通用方法。我的朋友告诉我,这可以通过斐波那契数列解决,但该解决方案并不适用于所有人。

请注意,这不是家庭作业。

0 投票
8 回答
448 浏览

oop - 哪个应该继承哪个?

这是无聊的学术 OOP 问题之一,但它不是作业。我从一个新手程序员那里得到了一个关于 OOP 的愚蠢教科书示例的问题。

想象一下,你正在设计一个 Square 类和一个 Cube 类,应该继承哪个?

我看到了关系,但它是什么,我真的看不出来!

你能给我一个关于 OOP 的合乎逻辑的论点吗?