c - 黑客排名 : Project Euler#1

标签 c algorithm function

我是竞争性编程的新手,我在 Hacker Rank 上做了一道题。问题陈述如下:

“如果我们列出所有 10 以下的自然数,它们是 3 或 5 的倍数,我们会得到 3、5、6 和 9。这些倍数的总和是 23。

求出 N 以下所有 3 或 5 的倍数之和。

输入格式 第一行包含 T,表示测试用例的数量。接下来是 T 行,每行包含一个整数 N。

输出格式 对于每个测试用例,打印一个整数,表示低于 N 的所有 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;
}

我的代码有什么错误。为什么它没有被接受?

最佳答案

有几个问题。

当从 func 返回时,您确实溢出了 int。此外,您的 printf 语句应该是 printf("%llu\n", count);

因此,func 的返回值、count 和局部变量 j 都应该是 unsigned long long 并且您的打印输出也应该反射(reflect)出这一点。您需要制作 j unsigned long long 因为 func 的返回语句中的算法(至少在 VS 2013 中是这种情况) .

关于c - 黑客排名 : Project Euler#1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28885581/

相关文章:

algorithm - 理解和构建社交网络算法

c# - 字符串搜索引擎 - 返回最佳结果?

C++ 函数模板导致输入参数出错

c++ - 在第三方函数中使用 vector 引用时出现意外错误

c - c中变量声明的歧义行为

c - 从 .txt 文件获取整数并在 c 中对它们执行操作

c++ - 是否可以禁止修改 for 循环体内的循环变量?

c - PDCurses 无法在 Windows 上编译

c - 我不明白这个算法的时间复杂度是如何计算的

c++ - 使用 C++ 从 .dll 调用带有默认参数的函数