- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
前一段时间在一次编程比赛中我遇到了一个令人费解的问题,此后一直困扰着我。虽然我没有逐字记住,但我会尽力重现:
Jack starts at 0 on the number line and jumps one unit in either direction. Each successive jump he makes is longer than the previous by 1 unit, and can be made in either direction. Write a program that takes a number and returns the minimum number of jumps Jack makes to reach that number.
如果这不是一个好问题,或者标题被认为具有误导性,我提前道歉。
最佳答案
我想详细说明@supercat 的正确和快速解决方案,并描述一种算法,除了计算这样一个和的长度之外,还计算一个最小长度和。
找到满足 t_k := 1 + 2 + 3 + ... + k >= |n| 的最小整数 k t_k 与 |n| 具有相同的奇偶性。然后系统地将t_k的被加数的符号翻转为总n。
这里是详细信息。注意 t_k = k(k + 1)/2,一个三角数。设置 t_k = |n|求解 k 给出 (-1 + sqrt(1 + 8|n|))/2 的上限。所以 k 等于上限或 1 或 2 加上它,这三个数字中的任何一个与 n 具有相同的奇偶校验并且是最小的。这里我们使用了这样一个事实,即三个连续三角形数的集合 {t, t + s, t + s + (s + 1)} 包含任何正整数 t, s 的偶数和奇数。(只需检查 t 和 s 的所有四种奇偶校验可能性。)
要找到 n 的最小长度和,首先计算 d := (t_k - n)/2。因为 t_k >= |n| t_k 和 n 具有相同的奇偶性,d 位于集合 {0, 1, 2, ..., t_k} 中。现在重复减去:d = a_k(k) + r_k, r_k = a_{k-1} (k-1) + r_{k-1}, ..., r_2 = a_1 (1) + r_1,选择每个a_i在 {0, 1} 中最大化。根据下面的引理,r_1 = 0。所以 d = sum_{i=1}^k a_i i。因此 n = t_k - 2d = sum_{i=1}^k i - sum_{i=1}^k 2a_i i = sum_{i=1}^k (1 - 2a_i) i 和 1 - 2a_i 位于 {-1 , 1}。所以序列 b_i := 1 - 2a_i 是一条路径,并且根据 k 的最小值,b_i 是一条最小路径。
考虑目标数 n=12。根据算法 3,k 的可能性为 5、6 或 7。t_k 的对应值为 15、21 和 28。由于 28 是其中与 n 具有相同奇偶性的最小值,因此我们看到 k=7 .所以d = (t_k - n)/2 = 8,我们按照算法记为1 + 7。因此,到 12 的最短路径是 -1 + 2 + 3 + 4 + 5 + 6 - 7。
我说 最短路径,因为最短路径通常不是唯一的。例如,1 + 2 -3 + 4 - 5 + 6 + 7 也可以。
引理:令 A_k = {0, 1, 2, ..., t_k}。那么一个数在A_k中当且仅当它可以表示为{0, 1}中某个序列a_i的和sum_{i=1}^k a_i i。
证明:通过对 k 的归纳。首先,0 = sum_{i=1}^0 1,空和。现在假设结果对所有 k - 1 >= 0 都成立,并假设数字 d 位于 A_k 中。反复相减:d = a_k(k) + r_k, r_k = a_{k-1} (k-1) + r_{k-1}, ..., 在{0, 1中选择每个a_i = 0或1最大} 并在第一个 r_j 位于 A_j 中且对于某些 j < k 时停止。然后通过归纳假设,r_j = sum_{i=0}^j b_i i 对于 {0, 1} 中的一些 b_i。然后根据需要 d = r_j + sum_{i=j+1}^k a_ki i。相反,a_i 在 {0,1} 中的和 s := sum_{i=1}^k a_i i 满足 0 <= s <= sum_{i}^k i = t_k,因此 s 位于 A_k 中。
假设算术运算是常数时间,从 n 计算 k 需要 O(1) 时间,因此计算到 n 的最小路径的长度。然后它需要 O(k) 时间来找到 d 的最小长度和,然后 O(k) 时间使用该和来产生 n 的最小长度和。所以 O(k) = O(sqrt(n)) 时间全部结束。
关于algorithm - 决定 'Jumping Jack' 的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15406950/
Google已正式发布其博客http://android-developers.blogspot.fr/2014/12/hello-world-meet-our-new-experimental.ht
我正尝试按照本文 https://developer.android.com/preview/j8-jack.html 中的步骤在我的 Android 项目中启用 Jack 工具链但只要我添加 and
系统:ubuntu 18.04 环境:VirtualBox 第一次在Ubuntu 18.04上编译AOSP源码,通过,第二次编译失败。 这是一条错误消息。 [ 10% 538/4980] Ensuri
我在使用最新的 Android Studio(预览版 4)和使用 Jack 进行编译时遇到问题。 我收到这个错误: FAILURE: Build failed with an exception. *
如 developer.android 网站所述 "The Jack toolchain is deprecated, as per this announcement. If your projec
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我使用的是 Android Studio 版本 v2.1.2,当我尝试签署发布版本时 Proguard 不起作用,构建严重失败。 According to this link from develop
尝试在 python 中使用 pyaudio 时出现以下错误。 Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010]
升级我的项目以启用 Jack 和 Java8 功能后,我的 16gb macbook 似乎无法再构建我的项目。我看到内存使用率越来越高,但进程总是卡在同一点。 我的 Gradle 控制台: Execu
假设我拥有一个社交媒体网站。我想实现一个 iframe,允许用户通过第 3 方网站注册我的网站 - 很像 facebook 的“like this”iframe,但用于注册。 (顺便说一句,这只是一个
我正在尝试在 Eclipse 中编写一个黑 jack 程序,但当该程序处理 Ace 时遇到问题。我询问用户是否希望 A 值 1 或 11。确实如此,但当我输入值时,它会给出错误消息 "Exceptio
我正在使用 ROS 运行大量 docker 容器,用于控制机器人。其中一个容器必须通过 sound_play 包播放一些音频文件。但是它返回错误 Cannot connect to server so
所以我正在开发一个黑 jack 程序,但我有点卡住了。我会警告大家,我对编程真的很陌生,而且,我正在项目中期......所以有一些松散的结局和未使用的变量,以及一些不必要的逻辑(用于测试),但这就是我
我不太确定如何解决。所以我正在编程 blackJack 并且我有我的函数声明(如图所示),对于我的 add_card_to_hand 函数,我不知道该怎么做。我有 2 个参数,一手牌是我通过引用传递的
我正在尝试在 Jack 中设置回调函数。这通常非常简单,使用函数“jack_set_process_callback”(在设置“process”回调的情况下)。 API中的定义是这样的: int ja
我目前无法将 Jack 集成到我的 QUnit 中。除了不知道从哪里开始,我也对如何实际使用它感到困惑 (Jack)。网络上没有很多示例,所以我想知道是否有人有使用 Jack 模拟 AJAX 调用/通
Android Studio 2.2 Gradle Android 工具 2.2.0 Gradle Wrapper 2.14.1-all 我正在使用 apt 插件编译 ButterKnife(版本 8
我需要像这样的兔子聚类的建议,任何人都可以提供引用。 有服务器 1 和 2,那里有大耳兔服务器 1 和 2。每个 jack 兔服务器创建一个 jack 兔文件夹。 如果server1访问jack ra
我在黑 jack 游戏中需要帮助。我在数组中有一副牌,每次我取出一张牌并处理它时,数组都会被重新分配为小于大小的一个。所以我有这个循环,向每个第 n 个玩家发两张牌 deck=crea
我在 HP Pavilion dm1 4200sg 上网本上运行 Ubuntu 12.04 工作室。这几乎是一个全新的安装。我尝试通过运行 来启动 jackd 服务器 jackd -R -d alsa
我是一名优秀的程序员,十分优秀!