只需一步,快速开始
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
请确认你是否能够跳跃到数组的最后一个下标。
例如:
A = [2,3,1,1,4],
return true.
A = [3,2,1,0,4],
return false.
格式:
第一行输入一个正整数n,接下来的一行,输入数组A[n]。如果能跳到最后一个下标,输出“true”,否则输出“false”
#include <stdio.h>[/size][/backcolor][/color] int main() { int i,n; scanf("%d",&n); int a[n]; for(i=0;i<n;i++) { scanf("%d",&a[i]); } if(n==1) { if(a[0]==0) printf("true"); else printf("false"); } else { for(i=0;i<n-1;) { i+=a[i]; if(i==n-1) printf("true"); if(i>n-1) printf("false"); if(a[i]==0) { if(i<n-1) printf("false");break; } } } return 0; }
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。
举报
#include <stdio.h> #include <string.h> #include <malloc.h> int main() { int n1; scanf("%d", &n1); int *psz = (int *)malloc(n1*sizeof(int)); for (int n=0 ; n<n1 ; n++) { scanf("%d" , &psz[n]); } int nIndex = n1 - 2; int nEnd = n1 - 1; int nSuc = 0; while (nIndex >= 0) { if (nIndex + psz[nIndex] >= nEnd) { nEnd = nIndex; nSuc = 1; } else { nSuc = 0; } nIndex--; } if (nSuc) { printf("true"); } else { printf("false"); } free(psz); return 0; }
#include<stdio.h> int main() { int n,max=0; scanf("%d",&n); int a[n]; for(int i=0;i<n;i++) { scanf("%d",&a[i]); } for(int j=0;j<n;j++) { if(j>max) { printf("false"); return 0; } if(j+a[j]>max) max=j+a[j]; } printf("true"); return 0; }
查看全部评分
lyogoo 发表于 2015-2-19 22:47 明显错了, 人家是最大跳那么多步, 不是就跳那么多步, 所有每一次都是有多重跳法,不断下去而形成一颗数 ...
Anonymouss 发表于 2015-2-19 22:30 可以往回跳。。。。。 应该用bfs
chinalixs 发表于 2015-2-20 10:38 看来要重新补数据结构啊。多谢了!
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
微信签到每天都送论坛币!
RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )
GMT+8, 2024-11-15 03:54
Powered by Discuz!
Copyright © 2001-2020, Tencent Cloud.