晚上参加某公司的笔试题遇到如下一道题,本来打算在网上搜索,无奈全是英文,所以我将大概意思写出,各位有知道是什么问题的可以告诉我,比如说这是道费波那奇数列,我想了半天没想出这道题该如何求解。
题目如下:
给你一个数比如 6,从0开始,第n步可以走n个距离
比如 第一步(0-->1) 走了1步
第二步(1-->3) 走了2步
第三步(3-->6) 走了3步
当然你也可以往负数那边走
比如4的话
(0,-1) (-1,1) (1,4)
走1步 走2步 走三步
程序C/C++ 实现不能使用任何stl,所有实现自己写,要求给定数字N,求出其所走序列。
表达能力有限,如果有疑问在此留言。
楼下几个说简单的,你不妨写出代码,多试几个数字,就知道这个程序有多简单了。
2015.9.21 19:59
………………………………………………………………………………
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
可能是我没明白,不过我觉得这个可以直接暴搜。
第一次假设一直往右走,然后用一个序列将其中的坐标全部存起来,到终点之后你想输出路径;
第二次假设前n-1步往右走,最后一步往左走,终点后坐标逆向输出;
第三次假设前n-2步往右走,第n-1步往左走,第n-2步往右走;
第四次假设前n-2步往右走,最后两步往左走;
……
以此类推,一直到最后一轮都是往左走就可以了。
就是每一步都有两个方向,全部跑一遍就好了。方案一共有2^n种。
代码如下:
上面有人说了, 查找状态 表示出来 是一个满二叉树. 那么数据结构就很明显了, 一个
vector. 可以参考堆 的实现, 第一级 index为0, 第二级为1, 2... 查找显然是一个bsf, 找到后 向上很容易 逆推出路径(堆中的parent函数). overChallenge accepted.
结果:
我不会C++,你凑合看吧,大概就这意思。