c语言 - 为什么 spoj 对这个解决方案给出错误的答案 "Even Count"



我正在尝试解决spoj上的GEEK COUNT问题。我解决这个问题的方法是先找出全是奇数的数,然后从给定的数中减去它。为了找到所有奇数的数字计数,我使用简单排列。它为我提供了所有可能的测试用例的正确答案。我也试着用蛮力方法交叉检查它,但仍然无法找到错误解决方案的测试用例。

#include<stdio.h>
unsigned long long int myPow(unsigned long long int N, unsigned long long int k)
{
    unsigned long long int result;
    if(k==0)
        return 1;
    if(k==1)
        return N;
    result=myPow(N,k>>1);
    if(k%2==1)
        return result*result*N;
    return result*result;
}
unsigned long long int solveForLessThan(unsigned long long int N)
{
    unsigned long long int result,temp_N;
    int power=0,digits[20],flag=0;
    temp_N=N;
    result=0;
    while(temp_N/10!=0)
    {
        result+=myPow(5,power+1);
        digits[power]=temp_N%10;
        power++;
        temp_N=temp_N/10;
    }
    digits[power]=temp_N;
    while(power>0)
    {
        if(digits[power]%2==0)
        {
            result+=(digits[power]/2)*myPow(5,power);
            flag=1;
            break;
        }
        else
        {
            flag=0;
            result+=(digits[power]/2)*myPow(5,power);
        }
        power--;
    }
    if(!flag)
    {
        result+=((digits[power]+1)/2);
    }
    return N-result;
}
int main()
{
    int test_cases;
    unsigned long long int L,R;

    for(scanf("%d",&test_cases);test_cases>=0;test_cases--)
    {
        scanf("%llu",&L);
        scanf("%llu",&R);
        printf("%llun",(solveForLessThan(R)-solveForLessThan(L-1)));
    }
}

请帮帮我。

如果你能给我提示一下哪个测试用例是错误的答案,那也会有很大的帮助。

我认为问题出在打印答案上。

在此代码中:

for(scanf("%d",&test_cases);test_cases>=0;test_cases--)

假设test_cases = 1.

循环执行,然后test_cases变为0,然后循环再次执行。

打印最后一个答案两次。

试题:

for(scanf("%d",&test_cases);test_cases>0;test_cases--)

相关内容

最新更新