博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java集合效率问题
阅读量:5051 次
发布时间:2019-06-12

本文共 2778 字,大约阅读时间需要 9 分钟。

 

 

凑算式

B DEF

A + --- + ------- = 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。

比如:

6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法?

注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

  显然可以用暴力算法,但是需要排除元素的重复问题,刚开始我用的是Java内置的Set集合,运行时间特别长

 

package lanqiao2016;import java.util.concurrent.ConcurrentSkipListSet;public class T3_array {	public static void main(String[] args) {		int a = 0;		int b = 0;		int c = 0;		int d = 0;		int e = 0;		int f = 0;		int g = 0;		int h = 0;		int i = 0;		int count = 0;				ConcurrentSkipListSet
intSet = new ConcurrentSkipListSet
(); for(a=1; a<=9; a++) { if(a > 10) continue; for(b=1; b<=9; b++) { for(c=1; c<=9; c++) { if(a + b/c > 10) continue; for(d=1; d<=9; d++) { for(e=1; e<=9; e++) { for(f=1; f<=9; f++) { for(g=1; g<=9; g++) { for(h=1; h<=9; h++) { for(i=1; i<=9; i++) { intSet.clear(); intSet.add(a); intSet.add(b); intSet.add(c); intSet.add(d); intSet.add(e); intSet.add(f); intSet.add(g); intSet.add(h); intSet.add(i); if(a + (double)b/c + (double)(d*100+e*10+f)/(double)(g*100+h*10+i) == 10 && intSet.size() == 9) { count++; } } } } } } } } } } System.out.println(count); }}

  

  后来改成直接的逻辑判断,几乎瞬间得出结果

package lanqiao2016;public class T3 {	public static void main(String[] args) {		int a = 0;		int b = 0;		int c = 0;		int d = 0;		int e = 0;		int f = 0;		int g = 0;		int h = 0;		int i = 0;		int count = 0;						for(a=1; a<=9; a++)		{			if(a > 10)				continue;			for(b=1; b<=9; b++)			{				for(c=1; c<=9; c++)				{					if(a + b/c > 10)						continue;					for(d=1; d<=9; d++)					{						for(e=1; e<=9; e++)						{							for(f=1; f<=9; f++)							{								for(g=1; g<=9; g++)								{									for(h=1; h<=9; h++)									{										for(i=1; i<=9; i++)										{											if(												a==b || a==c || a==d || a==e || a==f || a==g || a==h || a==i ||												b==c || b==d || b==e || b==f || b==g || b==h || b==i ||												c==d || c==e || c==f || c==g || c==h || c==i ||												d==e || d==f || d==g || d==h || d==i ||												e==f || e==g || e==h || e==i ||												f==g || f==h || f==i ||												g==h || g==i ||												h==i 												)												continue;																						if(a + (double)b/c + (double)(d*100+e*10+f)/(double)(g*100+h*10+i) == 10)											{												count++;											}																						}									}								}							}						}					}				}			}		}				System.out.println(count);	}}

  

转载于:https://www.cnblogs.com/liupy/p/10561478.html

你可能感兴趣的文章
socket
查看>>
Vue中使用key的作用
查看>>
二叉索引树 树状数组
查看>>
日志框架--(一)基础篇
查看>>
Java设计模式之原型模式
查看>>
Spring学习(四)-----Spring Bean引用同xml和不同xml bean的例子
查看>>
哲理故事与管理之道(20)-用危机激励下属
查看>>
关于源程序到可运行程序的过程
查看>>
wepy的使用
查看>>
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
面向对象1
查看>>
在ns2.35中添加myevalvid框架
查看>>
【贪心+DFS】D. Field expansion
查看>>
为什么要使用href=”javascript:void(0);”
查看>>
二进制文件的查看和编辑
查看>>
C# Async与Await的使用
查看>>
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>
javascript学习---BOM
查看>>