为了账号安全,请及时绑定邮箱和手机立即绑定

用C解决蜂窝问题,一点没有思路,有会的大佬可以帮忙看下嘛

用C解决蜂窝问题,一点没有思路,有会的大佬可以帮忙看下嘛

C
a12svs 2020-03-14 18:01:54
查看完整描述

2 回答

?
Warm_Sweet

TA贡献1条经验 获得超2个赞

这其实是一个斐波那契数列。

如下代码只是我个人的想法,可能跟你想要的不太一样,但是没办法,因为我也是小白,只能想到这么个不是办法的法子。

#include <stdio.h>

int way(int a, int b)

{

     int d, way, way0, x, i;

     d = b - a;

     if (d >= 0 && d <= 8)

     {

         for (way = 1, way0 = 0, i = 0; i < d; i++)

             {

                    x = way;

                    way += way0;

                    way0 = x;

              }

         return way;

     }

     return 0;

}

int main()

{

     int a, b;

     a = 7;

     b = 3;

     int number = way(a, b);

     if (number == 0)

            printf("%s\n", "请检查蜂巢代号及爬行方向");

     else

            printf("从%d处爬到%d处共有%d种路线\n", a, b, number);

     return 0;

}

对于这个问题,我也很有兴趣。如果你有什么想法的话,我会很乐意你分享给我的哦。

查看完整回答
2 反对 回复 2020-03-17
  • a12svs
    a12svs
    好的,我想问下为什么这个问题是斐波那契数列呢
  • Warm_Sweet
    Warm_Sweet
    斐波那契数列有这样的特征:自第三项起,每一项都等于前两项的和。 那么我们来看这个问题:蜜蜂只能向右走,而右边的数一定比自己大。我们从1号开始: 蜜蜂要移动到2号蜂巢,而与2号相邻的,且在2号左边的只有1号,所以只有一条路。 现在蜜蜂要爬到3号的位置,与3号相邻且在其左边的有1号和2号,那么1→3一共有1 + 1 = 2条路(认为1→1有一条路)。 现在是4号位置:与4号相邻且在其左边的是2号和3号,所以一共有1→2一种+1→3两种,三条路。 相应地,1→5则是1→3的两种+1→4的三种,一共五种方法。 …… 上面是解释蜂巢问题与斐波那契数列的对应关系,下面解释原因: 以【1→5】为例:5号左边分别是3号和4号,【3→5有】两条路:35;345;而【4→5】只有一条路:45; 【1→3】有两条路:13;123;【1→4】有三条路:124;134;1234; 用我们高中数学学过的排列组合法,就是【1→3】的方法数*【3→5】的方法数+【1→4】的方法数*【4→5】的方法数= 7。 但是【1→4】包含了所有1号先到号再到4号的所有方法,因此上面我们多算了345这种情况,去掉这个重复的部分,等同于【3→5】也只有一种方法,所以结果是【1→3】*1+【1→4】*1 = 5 解释得有点复杂,甚至有点啰嗦,但是很容易看懂。
  • a12svs
    a12svs
    好的我懂啦谢谢
  • 2 回答
  • 0 关注
  • 2472 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信