尽管测试用例正确,但UVA的3n + 1错误答案。。。?

sol*_*r99 1 c

UVA问题100-3n +1问题

我已经尝试了所有测试用例,但没有发现问题。我检查的测试用例:

  • 1 10 20
  • 100200125
  • 201 210 89
  • 900 1000 174
  • 1000 900 174
  • 999999 999990 259

但是为什么我总是会得到错误的答案?

这是我的代码:

#include "stdio.h"

unsigned long int cycle = 0, final = 0;

unsigned long int calculate(unsigned long int n)
{
    if (n == 1)
    {
        return cycle + 1;
    }
    else
    {
        if (n % 2 == 0)
        {
            n = n / 2;
            cycle = cycle + 1;
            calculate(n);
        }
        else
        {
            n = 3 * n;
            n = n + 1;
            cycle = cycle+1;
            calculate(n);
        }
    }
}


int main()
{
    unsigned long int i = 0, j = 0, loop = 0;
    while(scanf("%ld %ld", &i, &j) != EOF)
    {
        if (i > j)
        {
            unsigned long int t = i;
            i = j;
            j = t;
        }
        for (loop = i; loop <= j; loop++)
        {
            cycle = 0;
            cycle = calculate(loop);

            if(cycle > final)
            {
                final = cycle;
            }
        }
        printf("%ld %ld %ld\n", i, j, final);
        final = 0;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Wal*_*r R 5

提示是您收到ij,并不是所有情况下i <j,请检查代码中的条件,并记住始终按顺序打印:

<i>[space]<j>[space]<count>
Run Code Online (Sandbox Code Playgroud)