首页 > 解决方案 > 在 CodeWare.com 上运行测试的问题

问题描述

我的代码有什么问题吗?这是来自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;}

标签: c

解决方案


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

计算在给定的 neg 200 下有多少个 15,有 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 之间加回你没有计入的额外结尾部分。


推荐阅读