我已经解决了这个programming problem,当我提交我的代码时,法官说这是错的。我试过了,我无法弄清楚这个bug。有人可以给我一个提示吗?
因为如果我没有指定更多细节,堆栈溢出将不接受我的问题,我在这里复制问题
n的序列>如果绝对值为0,则整数称为快活跳线 连续元素之间的差异采用所有可能的值1到n - 1 例如, 1 4 2 3 是一个快乐的跳投,因为绝对差异分别是3,2和1。该 定义意味着单个整数的任何序列都是一个快乐的跳线。写一个程序 确定许多序列中的每一个是否是一个快乐的跳线。
输入 每行输入包含一个整数n <1。 3000后跟n个整数代表 序列
输出 对于每行输入,生成一行输出“Jolly”或“not jolly”。
代码
#include <stdio.h>
#define SEQ_SIZE 3000
static char stack[SEQ_SIZE];
void initStack(int count)
{
for(int i=0;i<count; ++i)
stack[i]=0;
}
int absDiff(int a, int b)
{
return (a-b)>=0?((a-b)%SEQ_SIZE):(((a-b)*-1)%SEQ_SIZE);
}
int main()
{
int n,prev,curr;
/*FILE *sample=fopen("SampleInput","r");
if(!sample)
return 0;*/
while(scanf("%d",&n)!=EOF)
{
scanf("%d",&prev);
if(n<1)
break;
else if(n==1)
printf("Jolly\n");
else
{
int i;
for(i=1; i<n; ++i)
{
scanf("%d",&curr);
stack[absDiff(curr,prev)-1]=1;
prev=curr;
}
for(i=0; i<(n-1); ++i)
{
if(stack[i]==0)
break;
}
if(i<n-1)
printf("Not jolly\n");
else
printf("Jolly\n");
initStack(n);
}
}
}
答案 0 :(得分:0)
我认为你的解决方案很好,除了
行return (a-b)>=0?((a-b)%SEQ_SIZE):(((a-b)*-1)%SEQ_SIZE);
此处无需使用%
。它应该是
return (a-b)>=0?((a-b)): (a-b)*(-1));
要将n
限制在3000
以下,您可以
if(n<1 || n >= 3000) // I merged it with n<1 condition
break;