求代码错误
发布网友
发布时间:2023-11-11 08:48
我来回答
共5个回答
热心网友
时间:2024-11-19 16:31
首先if(a[i]-a[i-1]>10) goto loop应该改为大于等于10,因为如果相邻两个距离为10,那么表示只有前一只青蛙可以跳到下一个地点,而后一只因为要越过前一只,肯定就不够了。
另外你这种贪心算法是有问题的,不是每次后一只青蛙都能跳到最远的可能位置的,应该考虑给前一只青蛙预留余地。而且你也没有考虑青蛙不能重叠的问题。
比如说:1,2,10,11,13。显然第一只青蛙最远能跳到11,但是如果跳到11,第二只青蛙就没法跳了。但是如果第一只一开始跳到10,则第二只可以跳到11,这样就能跳到目标点了。
应该每次同时考虑前一只和后一只青蛙的可达点,只有当前一只有可达点超过了后一只的最远可达点时,后一只才选最远可达点。否则只能选次远的。如果没得选,就是无解
热心网友
时间:2024-11-19 16:31
#include <stdio.h>
#include <stdlib.h>
int main(){
int jack,jill;
long int *x;
int n;
while (scanf("%ld",&n)!=EOF && n)
{
x =(long int *)malloc(n * sizeof(long int));
int i;
for (i = 0; i < n;i++)
{
scanf("%d",&x[i]);
}
jack = x[1];
jill = x[0];
int check = 0;
int jack_steps = 0;
int jill_steps = 0;
for (i = 2; ; i++)
{
if (i % 2 == 0)
{
if (x[i] - jill > 10)
{
printf("-1\n"); check = 1; break;
}else{
jill = x[i];
jill_steps = jill_steps + 1;
}
}else{
if (x[i] - jack > 10)
{
printf("-1\n"); check = 1; break;
}else{
jack = x[i];
jack_steps = jack_steps + 1;
}
}
if (i == n-1)
{
break;
}
}
if (!check)
{
printf("%d\n",((jack_steps > jill_steps)?jill_steps+1:jack_steps+1));
}
}
return 0;
}
你试试吧,哪里的题目啊??那个OJ系统的?
A 了没啊??
有什么不了解的加我好友
A了没?A了给分
没A就说一声
热心网友
时间:2024-11-19 16:32
给你组测试数据
3
1 11 12
结果应该是-1,因为第一跳就不够远(Jack最远只能跳到11,但和Jill重合了)
热心网友
时间:2024-11-19 16:32
你的input是从文件读入内存还是从键盘输入?
热心网友
时间:2024-11-19 16:33
大哥了,你能不能用中文呀.