我的代码有什么问题吗?这是一个来自 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;}
答案 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 之间添加您没有计算在内的额外结尾部分。