在 CodeWare.com 上运行测试的问题

时间:2021-03-15 03:11:17

标签: c

我的代码有什么问题吗?这是一个来自 codewar 的问题,我正在尝试解决,它在 atom 上有效,但是当我在网站上运行测试时,它显示错误?

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

完成该解决方案,使其返回传入数字以下所有 3 或 5 的倍数之和。

注意:如果数字是 3 和 5 的倍数,则只计算一次。此外,如果数字为负数,则返回 0(对于有它们的语言)

问题链接 https://www.codewars.com/kata/514b92a657cdc65150000006/train/c

#include <stdio.h>

int sum_of_mul_of_3or5(int n)
{
  if(n<0){return 0;}
  int s = n,sum = 0,array[s];
  for(int i=1; i<n;i++)
  {
    array[i-1] = 0;
    if(i%3 == 0|| i%5 == 0){array[i-1] = i;}
    sum += array[i-1];
  }
  for(int i=0; i<n; i++)
  {
    printf("%d ",array[i]);
  }
  return sum;
}

int main(){


  int limit; printf("Enter a limit number: "); scanf("%d",&limit);
  int sum = sum_of_mul_of_3or5(limit);
  printf("\n");
  printf("%d",sum);


return 0;}

1 个答案:

答案 0 :(得分:-1)

你的算法是 O(N) - 它应该是 O(1)。

计算给定 n 下有多少个 15。例如 200,有 N=13 个长度为 15 的块。每 15 个(从 K 到 K+14)你得到 K,K+3,K+5,K+6,K+9,K+10,K+12 ,总共 7N+45。总结起来,只需使用 N(N+1)/2*7+45N。然后在 195 到 199 之间添加您没有计算在内的额外结尾部分。

相关问题