【每天例题】跳石板 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; } |
运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)