【枚举算法】和积三组
来源:互联网 发布:发生安全事故数据 编辑:程序博客网 时间:2024/06/02 13:16
算法分析:
设n为正整数,试把整数3n分解为9个互不相同的正整数a,b,c,d,e,f,g,h,i,然后把这9个正整数分成(a,b,c)、(d,e,f)与(g,h,i)三个三元组(约定a<b<c.d<e<f,g<h<i,a<d<g),若这三个三元组具有以下两个合积相等特性:
a + b + c = d + e + f = g + h + i = n
a * b * c = d * e * f = g * h * i
那么(a,b,c)、(d,e,f)、(g,h,i)就为一个基于n的合积相等特性。
例如: n = 45
4 + 20 + 21 = 5 + 12 + 28 = 7+ 8 + 30 = 45
4 * 20 * 21 = 5 * 12 * 28 = 7 * 8 * 30 = 1680
因9个不同正整数之和至少为45,由此可知正整数n > 14。
1) 设置枚举循环
由于 a + b + c = n,且a < b < c,因而a、b循环取值如下:
a: 1~(n - 3)/3,因b比a至少大1,c比a至少大2,即a至多为(n - 3)/3。
b: a + 1~(n - a - 1)/2。因c比b至少大1,即b至多为(n - a - 1)/2。
c = n - a - b,以确保a < b < c且a + b + c = n
设置d、e循环与g、h循环基本同上,只是由于d > a,因而d起点为 a + 1;g > d,因而g起点为d + 1。
2) 检验和积相等
在设置的枚举循环中,确保了三个三元组和相等,若abc = def = ghi,则表示积相等,用count统计组数。
3) 省略相同整数的检验
若两个和相等的3元组中,若等号两边有部分数相同,部分数不同,不可能有积相等。
代码实现:
/** * 和积三组 */public static void groupBy(){Scanner input = new Scanner(System.in);System.out.println("请输入正整数n:");int n = input.nextInt();//定义和积三组的所有数字int a,b,c,d,e,f,g,h,i = 0;//统计个数int count = 0;//循环求解for (a = 1; a <= (n - 3)/3; a++) {for (b = a + 1; a <= (n - a - 1)/2; b++) {for (d = a + 1; d <= (n - 3)/3; d++) {for (e = d + 1; e <= (n - d - 1)/2; e++) {for (g = d + 1; g <= (n - 3)/3; g++) {for (h = g + 1; h <= (n - d - 1)/2; h++) {System.out.println(1);//确保和相等c = n - a - b;f = n - d - e;i = n - g - h;//乘积int temp = a * b * c;//在这里排除积不相等if (d * e * f == temp && g * h * i == temp) {count++;System.out.print(" "+count+": " + a + " "+b+" " + c + "、");System.out.print(" "+ d + " "+e+" " + f + ";");System.out.println(" " + g + " "+ h +" " + i + ";"+ "(" + temp +")");}}}}}}}input.close();}
- 【枚举算法】和积三组
- 模拟和枚举算法
- leetcode算法实例---组合和枚举问题
- 枚举算法
- 枚举算法
- 枚举算法
- 枚举算法
- 枚举算法
- 枚举算法
- 枚举-算法
- 【数据结构与算法006】基本概念和枚举算法
- 枚举和枚举类
- 【枚举算法】枚举法概念
- 算法竞赛入门第七章(2):枚举排列和子集
- 转贴 : 枚举算法
- ACM--枚举算法
- 枚举(穷举)算法
- 关于排列枚举算法
- 火狐浏览器是如何又变快起来的?
- [TensorFlow] Ubuntu 17.04 + Anaconda + Tensorflow + PyCharm 环境配置
- ubuntu cd 改变路径
- 设计模式总结
- 112. Path Sum
- 【枚举算法】和积三组
- Salesforce -- 自定义放大镜查找界面
- win7系统将ISO镜像文件写入U盘
- Python基础篇之List一.(创建List)
- 第十节 java if else switch 条件语句,switch 穿透
- ubuntu ln软连接硬连接
- 禁止微信中长按出现 复制文本和在浏览器中打开
- 搞不清FastCgi与PHP-fpm之间是个什么样的关系
- 初识CSS——关于布局