找不到逻辑错误

时间:2013-11-17 16:12:56

标签: c

我已经解决了这个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);
        }
    }
}

1 个答案:

答案 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;