2015-03-05 7 views
5

मैं प्रतिस्पर्धी प्रोग्रामिंग के लिए नया हूं और मैंने हैकर रैंक पर एक समस्या की है। प्रश्न बयान इस प्रकार है:हैकर रैंक: प्रोजेक्ट यूलर # 1

"हम 10 कि 3 या 5 के गुणज हैं नीचे सभी प्राकृतिक संख्याओं को सूचीबद्ध है, तो हम मिल 3, 5, 6 और 9 इन गुणकों की राशि 23.

है

एन

इनपुट स्वरूप पहली पंक्ति टी कि परीक्षण के मामलों की संख्या को दर्शाता है शामिल नीचे 3 या 5 के सभी गुणकों की राशि का पता लगाएं। इस टी लाइनों द्वारा पीछा किया जाता, एन

प्रत्येक एक पूर्णांक युक्त,

आउटपुट प्रारूप प्रत्येक परीक्षण मामले के लिए, एक पूर्णांक मुद्रित करें जो सभी गुणकों के योग को दर्शाता है एन के नीचे 3 या 5 का। "

प्रतिबन्ध

1≤T≤10^5

1≤N≤10^9

मैं निम्नलिखित कोड जो सफलतापूर्वक 3 परीक्षण मामलों संतुष्ट करता है और शेष दो में विफल रहता है लिखा है।

#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <stdlib.h> 

int func(int p,int n) 
{ 
    int j; 
    n=n-1; 
    j=n/p; 
    return (p*j*(j+1))/2; 
} 

int main() 
{ 
    unsigned long int n; 
    int t,j,count; 
    scanf("%d",&t); 
    if(t>=1 && t<=100000){ 
     for(j=0;j<t;j++) 
     { 
      scanf("%lu",&n); 
     if(n>=1 && n<=1000000000) 
     { 
       count=func(3,n)+func(5,n)-func(15,n); 
       printf("%d\n",count); 
      } 

     }} 
    return 0; 
} 

मेरे कोड में क्या गलती है। यह स्वीकार क्यों नहीं हो रहा है?

+4

यह प्रतिस्पर्धात्मकता के बारे में नहीं है ... यह एक पहेली के लिए जवाब खोजने के बारे में है। यह उपयोगी नहीं हो सकता है लेकिन समस्या को हल करने से बहुत संतुष्टि मिलती है। तो यदि आप वास्तव में गलती खोजने में मेरी मदद कर सकते हैं, तो यह वास्तव में सहायक होगा। –

+1

क्या आप func() के पीछे एल्गोरिदम समझा सकते हैं? – jarmod

+1

@jarmod: यह सभी प्राकृतिक संख्याओं के योग का एक प्रकार है जो 'n'' n * (n + 1)/2' तक है, केवल चरण 'p' के साथ। –

उत्तर

1

कुछ मुद्दे हैं।

func से लौटने पर आप वास्तव में int ओवरफ़्लोइंग कर रहे हैं। इसके अलावा, अपने printf बयान printf("%llu\n", count);

तो, func, count से वापसी, और स्थानीय चर j होना चाहिए, सब होना चाहिए unsigned long long और अपना प्रिंट आउट प्रतिबिंबित रूप में अच्छी तरह करना चाहिए। func के लिए रिटर्न स्टेटमेंट में अंकगणित के कारण आपको junsigned long long बनाना होगा (यह कम से कम वीएस 2013 में मामला है)।

संबंधित मुद्दे