【每天例题】跳石板 C语言

跳石板

题目

https://www.nowcoder.com/practice/4284c8f466814870bae7799a07d49ec8?tpId=122&tqId=33674&ru=/exam/oj

思路分析

以从石板4调到石板24为例:

i=4: 4(0)——>6(1)

i=5:(无)

i=6: 4(0)——>6(1)——>8(2)   or  4(0)——>6(1)——>9(3)

i=7:(无)

i=8: 4(0)——>6(1)——>8(2)——>10(3)  or   4(0)——>6(1)——>8(2)——>12(3)

i=9:4(0)——>6(1)——>9(3)——>12(4)【由于与i=8时的第二分支比步数大1,故选取i=8时的第二分支】

i=10:4(0)——>6(1)——>8(2)——>10(3)——>12(4)【舍弃,理由同上】  or  4(0)——>6(1)——>8(2)——>10(3)——>15(4)

.......

所以我们可以通过i的遍历寻找到跳到合适石板上的步数。

代码

这个代码放到题目验证无法通过,因为当m过大时,运算超时,这道题最好的解答还是使用动态规划,但是求较小的m时,如果没有学过动态规划,这个代码也可以用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<stdio.h>
int main()
{
    int n,m;
    int i,j;
    int s[100000];
    scanf("%d%d",&n,&m);
    s[n]=0;//步数
    for(i=n;i<=m;i++)
    {
        for(j=2;j<i;j++)//寻找约数
        {
            if(i%j==0)
            {
                if(s[i+j]==0)
                {
                    s[i+j]=s[i]+1;
                    if(i+j==m)
                    {
                        printf("%d",s[m]);
                    }
                }
            }
        }
    }
    if(s[m]==0)//无法跳到目标石板
    {
        printf("-1");
     }
    return 0;
 }

 运行结果

 

posted @   山远尽成云  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示