NYOJ-452 ShippingCubes【数学】
来源:互联网 发布:ubuntu jdk tar.gz 编辑:程序博客网 时间:2024/06/06 03:43
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=452
解题思路:
这道题是topcoder的一次比赛题目,但是数据太水,暴力可过。3层循环无压力。
但是如果是正规做法,应该是先将n开3次方,因为要3个数的和最小,所以3个数越接近越好(这貌似是个定理,不过不知道名字,就是知道而已),然后,如果找到这个数,剩下的就是n/k,这时,我们需要将n/k开方,同样找到2个最接近的数,这样3个数就是最小的。本来想的是第一次找到的一定是最小的,但是却返回一个WA,比如116,正确答案是2×2×29,而按照上面方法得到的是1×4×29,这样,我暂时是找到答案不跳出,而是继续遍历,将循环遍历之后维护ans使之最小。
暴力代码如下:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<climits>#include<cstdlib>#include<algorithm>using namespace std;int main(){int n;int res;while(scanf("%d", &n) != EOF){res = n + 2;for(int i = 1; i <= n; ++i)for(int j = 1; j <= n; ++j)for(int k = 1; k <= n; ++k){if(i * j * k > n)break;else if(i * j * k == n)res = min(res, i + j + k);}printf("%d\n", res);}return 0;}
优化方法如下:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<climits>#include<cstdlib>#include<algorithm>using namespace std;const double INF = 0.000005;double three_root(double n) //牛顿迭代法求三次方根{double x = n;while(fabs(x * x * x - n) >= INF)x = (2 * x * x * x + n) / (3 * x * x);return (x);}int main(){int i, j, temp;int ans;double n;while(scanf("%lf", &n) != EOF){ans = n + 2;temp = floor(three_root(n));for(i = temp; i > 0; --i){if((int)n % i == 0){for(int j = sqrt((double)((int)n / i)); j > 0; --j){if((int)n / i % j == 0){ans = min(ans, i + j + (int)n / i / j);break;}}}}printf("%d\n", ans);}return 0;}
- NYOJ-452 ShippingCubes【数学】
- NYOJ--452题ShippingCubes
- nyoj分类-数学
- nyoj 中位数 124 (数学)
- NYOJ 954 N! (数学)
- nyoj 1087 数学规律
- NYOJ【34】韩信点兵【数学】
- fibonacci数列(二) nyoj 数学
- NYOJ【57】6174问题【数学】
- NYOJ【74】小学生算术【数学】
- NYOJ 451 组合数学 错排
- nyoj 897 数学题目 (找规律)
- nyoj 69 数的长度 【数学】
- NYOJ 105 九的余数【数学】
- NYOJ 题目633 幂(数学)
- NYOJ 题目854 留恋(数学)
- NYOJ 题目954 N!(数学)
- nyoj 弹球II(数学 模拟)
- sql server create file遇到操作系统错误5拒绝访问
- Maven2 的常用命令
- windows API 菜鸟学习之路(二)
- 用ModelSim仿真SDRAM操作
- 中奖概率算法
- NYOJ-452 ShippingCubes【数学】
- Linux 工作队列详解
- 智能手机音频系统概述
- throw 和throws的区别
- 编译Android源代码过程中的一些问题解决方法
- C++类的数据成员初始化
- Android如何找到正确的ALSA底层kcontrol接口?
- mysql,oracle,sqlserver操作语句
- Java程序员应该了解的10个面向对象设计原则