生成整数的三元组
回答
没有选择,你必须通过两个嵌套循环运行:
假设0<=a,b,c
和(2,1,1)是相同的三重为(1,1,2)(有permutationally当量) ,你可以添加约束a<=b<=c
for(int a=0; a<=k/3; a++) { // a <= b <= c -> 3a <= k
for(int b=a; b<=(k-a)/2; b++) { // b <= c -> 2b <= k-a
c = k-a-b;
//Do your thing
}
}
“没有选择”:它也可以通过“包装”带有单环来解决这个(A,B),其在环路一个整数和“拆包”。诚然,这将是一个低效率的解决方案,但这种选择存在。 – 2014-09-02 06:24:36
对于a
和b
,可以使用两个循环,但是您不需要重复计算c
。另外,如果订单无关紧要,您可以假设a >= b >= c
这将进一步减少您需要探索的组合。
注意:这些问题大多数是数学问题,而不是编程挑战。编码之前,你需要考虑一个优雅的数学解决方案。
这是我出于好奇而得到的解决方案。针对您发布的问题获取此解决方案非常有趣。你错过了重要的标准,即三个数字必须是不同的,并且没有对所述三个整数的具有共同的因子大于1
public static int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
public static int pairwisePrimes(int k) {
int numWays = 0;
for (int a = 1; a < k; a++) {
for (int b = a + 1; b < k; b++) {
for (int c = b + 1; c < k; c++) {
if ((a + b + c == k) && gcd(a, b) == 1 && gcd(a, c) == 1 && gcd(b, c) == 1) {
System.out.println("" + a + "+" + b + "+" + c);
numWays++;
}
}
}
}
return numWays;
}
我已经有这样的检查三元相对素性,所以对我来说这是通过合适的整数迭代,并把三胞胎到测试的问题的方法。三个整数必须是不同的事实并不重要,因为只有两个共同数字的对是1,1和k,所以我只减去一个来得到答案。 – Blimeo 2014-09-01 13:49:25
该组三胞胎(a,b,c)
,使得a+b+c=k
定义3D平面空间,即2D实体。对于一个给定的k
,正确的整数正好有(k+1)(k+2)/2
解决方案。这个表达式是O(k^2)
,表明双循环将会执行。
for a= 0 to k
for b= 0 to k-a
c= k-a-b
...
这种解决方案假定
- 0被允许;
- 订单事宜,f.i. (1,2,3)和(2,1,3)是两个不同的解决方案。
在我看来,由于只有40个值需要支持,TopCoder问题的最佳解决方案是在预先计算的向量中查找。没有什么能击败(它既是超快和超小型):
int Table[41]= { 0, 0, 0, 0, 0, 0, 1, 0, 2, 1, 3, 1, 6, 1, 7, 3, 7, 3, 14, 3, 15, 6, 14, 6, 25, 6, 22, 10, 25, 9, 42, 8, 34, 15, 37, 15, 53, 13, 48, 22, 53 };
return Table[Num];
表可以被计算为根据需要(I中使用的简单的Python脚本)低效。
import fractions
for k in range(40 + 1):
T= 0
for a in range(1, k + 1):
for b in range(1, k + 1):
for c in range(1, k + 1):
if a < b and b < c and a + b + c == k and fractions.gcd(a, b) == 1 and fractions.gcd(b, c) == 1 and fractions.gcd(c, a) == 1:
T+= 1
print T
我很想知道TopCoder认为最好的解决方案。 – 2014-09-02 06:30:08
- 1. 在数据库中存储三元组或即时生成?
- 2. 生成元组
- 3. 从元组生成元组
- 4. 基于三个列表生成所有可能的元组
- 5. 如何整数转换成等于整数元素的数组
- 6. Scala:生成Ints的元组
- 7. 从2元组列表生成3元组的最大数目
- 8. Python - 构建三元组元组的三元组策略
- 9. 使用任意实例生成三元组(Network.HTTP.ResponseCode)
- 10. 给定三元组生成二次多项式
- 11. 使用元素生成JavaScript数组
- 12. Android根据数组生成xml元素
- 13. 特定元组生成和计数(MATLAB)
- 14. 在Foreach元素中生成数组键
- 15. 生成一个整数的所有组成k部分
- 16. 将rdfxml转换成龟三元组
- 17. 生成元组模索引
- 18. 为什么在连接jQuery对象的两元素和三元素数组时,Array.concat会生成三元素数组?
- 19. 从数组中随机生成三个特定的字母
- 20. 如何生成三列数的表格?
- 21. 凑整数字的元组
- 22. 整数元组的条件
- 23. 数组三元组只显示一次
- 24. 三元运营蒙上整数
- 25. 变换元组“三角”的元组
- 26. 生成阵列与整数
- 27. 摆脱使用pyLD生成的三元组主题中的空白节点
- 28. 如何在几个数组中生成元素的组合?
- 29. JavaScript - 使用m个元素生成n个数组的组合
- 30. 如何生成数组中所有n个元素的组合?
我敢打赌有! – 2014-09-01 12:21:55
听起来像给我作业。除此之外:对a,b和c没有任何限制吗? – reto 2014-09-01 12:22:00
这不是家庭作业,它是一个TopCoder问题。如果您有兴趣,请点击以下链接:http://community.topcoder.com/stat?c=problem_statement&pm=54&rd=3000 – Blimeo 2014-09-01 12:22:58