0
我正试图解决关于spoj的GEEK COUNT问题。我对这个问题的方法是首先找到所有奇数的数字,然后从给定的数字中减去它。为了找到所有奇数的数字,我使用简单的置换。 它给了我所有可能的测试用例的正确答案。我试图用蛮力的方法进行交叉检查,但仍然无法找到错误解决方案的测试用例。为什么spoj给出了这个“Even 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("%llu\n",(solveForLessThan(R)-solveForLessThan(L-1)));
}
}
请帮我一把。即使您只是提示错误答案即将出现的测试用例,这也会是一个很大的帮助。
喔天啊,这样愚蠢的错误让我觉得像我自己杀人。我非常抱歉问这个问题,并且非常感谢你们对我使用“愚蠢”的词,并给我答案。 – Naman
没问题,你显然是通过测试一个强力方法来努力工作的,而且我对了解你的方法很感兴趣。很有趣的是,for循环看起来完全正确 - 我在编写自己的强力程序后才发现错误,与... –
再次感谢您的帮助。我真的很感激它。 – Naman