c - 在 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;}
解决方案
你的算法是 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 之间加回你没有计入的额外结尾部分。
推荐阅读
- c# - TCP 服务器的 IDuplexPipe 示例实现
- ios - 将主 iOS App 目标中使用的 Utility 方法添加到 Xcode 中的 UI 测试目标是否正确?
- laravel - 在 Laravel / Eloquent 中动态获取对象的父关系
- json - 如何使用 jolt 将整个 json 添加为对象
- node.js - esclient nodejs中如果数组字段长度大于0则返回文档
- python - 异常值检测并在完整数据框中替换它们
- amazon-s3 - radosgw + civetweb s3 403 创建存储桶
- javascript - 在回复 Discord.js 中使用数学
- ios - Swift:无法关闭视图控制器
- javascript - 没有互联网时的数据库操作,Firebase Angular/Ionic