Tôi mới tham gia chương trình cạnh tranh và tôi đã gặp vấn đề với Xếp hạng Hacker. Những tuyên bố câu hỏi như sau:Hacker Xếp hạng: Dự án Euler # 1
"Nếu chúng ta liệt kê tất cả các số tự nhiên xuống dưới 10 mà là bội số của 3 hoặc 5, chúng tôi nhận được 3, 5, 6 và 9. Các tổng của các bội số là 23.
Tìm tổng của tất cả các bội số của 3 hoặc 5 dưới đây N.
Input Format dòng đầu chứa T mà biểu thị số trường hợp thử nghiệm. tiếp theo là dòng T, mỗi có chứa một số nguyên, N.
Định dạng đầu ra Đối với mỗi trường hợp kiểm tra, in một số nguyên biểu thị tổng của tất cả bội số của 3 hoặc 5 dưới N. "
chế
1≤T≤10^5
1≤N≤10^9
Tôi đã viết đoạn mã sau đó đáp ứng thành công 3 trường hợp thử nghiệm và thất bại tại còn lại hai.
#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;
}
Lỗi trong mã của tôi là gì. Tại sao nó không được chấp nhận?
Nó không phải về khả năng cạnh tranh ... Đó là về việc tìm câu trả lời cho một câu đố. Nó có thể không hữu ích nhưng giải quyết vấn đề cho rất nhiều sự hài lòng. Vì vậy, nếu bạn thực sự có thể giúp tôi trong việc tìm ra sai lầm, điều đó sẽ thực sự hữu ích. –
Bạn có thể giải thích thuật toán đằng sau hàm func() không? – jarmod
@jarmod: Đó là một biến thể của tổng của tất cả các số tự nhiên lên đến 'n' là' n * (n + 1)/2', chỉ với bước 'p'. –