Rekabetçi programlamaya yeni çıkıyorum ve Hacker Rank konusunda bir sorunla karşılaştım. şöyle bir soru ifadesi:Hacker Derece: Project Euler # 1
"Biz 3 veya 5 katı olan 10'un altındaki tüm doğal sayılar listesi, biz 3, 5, bu katları 6 ve 9. toplamı 23.
olduğunu olsunN. ilk hat test vakalarının sayısını belirtmektedir T içeren
Giriş Biçimi aşağıdaki 3 veya 5 tüm katları toplamını bulmak. Bu, N.
her biri bir tam sayı içeren T hatları izlemektedirÇıkış Biçimi Her bir test durumu için, tüm katların toplamını gösteren bir tamsayı yazdırın. N altında 3 veya 5
Kısıtlamalar
1≤T≤10^5
1≤N≤10^9 başarıyla 3 test durumları karşılar ve kalan iki başarısız aşağıdaki kodu yazdım
.
#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;
}
Kodumdaki hata nedir? Neden kabul edilmiyor?
Bu rekabetle ilgili değil ... Bir bulmacanın cevabını bulmakla ilgili. Kullanışlı olmayabilir, ancak problemi çözmek çok tatmin edici sonuçlar verir. Yani, eğer insanlar hatayı bulmama yardım edebilirlerse, bu gerçekten yardımcı olur. –
Func() 'nin arkasındaki algoritmayı açıklar mısınız? – jarmod
@jarmod: 'n' (n + 1)/2 'ye kadar olan tüm doğal sayıların toplamı, sadece' p 'adımıyla. –