【9305】蜜蜂路线

Time Limit: 10 second
Memory Limit: 2 MB

问题描述
一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,
现在问你:蜜蜂从蜂房M开始爬到蜂房N,有多少种爬行路线?

Input

仅一行,包含两个integer范围以内的自然数m,n 。

Output

仅一行,包含一个自然数,即爬行路线的种数。

Sample Input

1 14

Sample Output

377
 

【题解】

假设我们从1出发,然后设a[i]为到位置i的步骤数,那么a[2] = 1,即 直接从1走到2,a[3] = 2,即从1走到3 或者从1走到2 再走到3.

a[4] = a[2] + a[3].即走到3然后走到4,或者走到2再走到4.

以此不难得出递推式a[i] = a[i-1] + a[i-2];

然后我们可以看出 决定路线种数的不是起始和末位置,而是两个数的差,即b-a + 1;设这个数为n,则我们在求斐波那契数列的第n项。

我们只要用a,b,c三个数字递推就能得出答案。不过要用高精度,因为n可能很大。

【代码】

#include <cstdio>
#include <cstring>

int x,y,z,n;
int a[500],b[500],c[500];

void input_data()
{
    scanf("%d %d",&x,&y);
    if (x > y) //保证 x是小于y的
        {
            z = x;x = y;y = z;
        }
    n = y - x + 1; 得到n
}

void get_ans()
{
    memset(a,0,sizeof(a)); //初始化a,b,c数组 用于高精度运算
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    int la = 1,lb = 1,lc; //分别表示a,b,c表示的数字的长度
    a[1] = 1;b[1] = 1;
    if ( n == 1)
        {
            printf("1");
            return;
        }
    if (n == 2)
        {
            printf("1");
            return;
        } //n等于1或2的情况只要特判就可以
    for (int i = 3;i <=n;i++) //大于等于3则需要用迭代+高精度的方法获取答案
        {
            int l;
            if (lb > la)
                l = lb;
                    else
                        l = la;
            int x = 0; //x用来处理进位问题
            for (int j = 1;j <= l;j++)
                {
                    c[j] = a[j] + b[j] + x;
                    x = c[j] / 10;
                    c[j] = c[j] % 10;
                }
            while (x > 0) //要进位 可能会让数字的长度变长
                {
                    l++;
                    c[l] += x;
                    x = c[l] / 10;
                    c[l] = c[l] % 10;
                }
            lc = l;
            for (int j = 1;j <= lb;j++) //进行迭代 a = b,b =c
                a[j] = b[j];
            la = lb;
            for (int j = 1;j <= lc;j++)
                b[j] = c[j];
            lb = lc;
        }
    for (int j = lc;j >= 1;j--)
        printf("%d",c[j]);
}

int main()
{
    input_data();
    get_ans();
    return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 小蜜蜂游戏,通常指的是基于 Linux 系统的一个简易版本的小蜜蜂飞行射击游戏。它类似于经典的《太空侵略者》(Space Invaders)或者《俄罗斯方块》等其他电子游戏,不过由于它是作为 Linux 发行版的一部分提供的,因此通常会包含在 Linux 的图形终端环境中,如 X Window 或者 Wayland 中。 ### 游戏简介: Linux 小蜜蜂游戏的目标通常是让玩家控制一只蜜蜂,通过上下移动避免或击落从屏幕顶部飞来的敌人,同时收集分数和生存尽可能长的时间。游戏中会有各种类型的敌机,它们会从上往下移动,并尝试撞击你的“蜂房”或让你失去生命值。玩家通过按键操作,比如方向键或箭头键来控制蜜蜂的上下移动。 ### 安装和运行: - **安装**:对于特定的发行版,例如 Ubuntu、Debian 或 Fedora,你可以通过包管理器(如 apt-get 对于 Debian 和 Ubuntu,dnf 或 yum 对于 Fedora)安装相应的游戏库或软件中心找到并下载游戏。一些游戏可能直接作为系统组件提供,只需启动桌面环境即可进入游戏菜单。 - **运行**:在图形界面下,只需双击桌面上的游戏图标即可开始游戏。在命令行环境下,可以通过输入游戏的名称或者相应的命令来运行游戏。 ### 相关问题: 1. **如何提高我的游戏得分技巧?** - 学习预判敌人的动向,利用好躲避时机; - 保持冷静,充分利用空隙时间收集额外奖励,如加分道具; - 利用游戏内提示或教程,了解特殊攻击或隐藏功能。 2. **能否自定义或修改 Linux 小蜜蜂游戏?** - 许多基于开源平台的游戏都允许一定程度的定制,包括修改代码或添加新内容。这需要一定的编程知识,尤其是熟悉 C 语言(如果该游戏是基于此编写的话)。 - 社区支持和资源,如 GitHub 上的游戏仓库,可以提供修改指南或模组(mod)文件,帮助用户个性化游戏体验。 3. **有哪些替代的开源飞行射击游戏推荐吗?** - **Amiga Deathmatch**:一款类似于 Quake 的第一人称射击游戏,有 Linux 版本可供下载。 - **Doom源代码项目**:除了经典版本外,还有许多基于 Doom 的开源项目可供探索,如 HexenII 和 Heretic。 - **Lunar Lander**:虽然不是飞行射击游戏,但它是一款经典的控制飞船着陆的挑战游戏,也适合初学者学习基本的游戏编程概念。 这些信息应当能帮助您更好地理解和享受 Linux 平台上的小蜜蜂游戏以及其他飞行射击游戏的乐趣。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值