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