凑算式

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<Integer> intSet = new ConcurrentSkipListSet<Integer>(); 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);
}
}

  

Java集合效率问题的更多相关文章

  1. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  2. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  3. Java集合框架实现自定义排序

    Java集合框架针对不同的数据结构提供了多种排序的方法,虽然很多时候我们可以自己实现排序,比如数组等,但是灵活的使用JDK提供的排序方法,可以提高开发效率,而且通常JDK的实现要比自己造的轮子性能更优 ...

  4. Java集合---Array类源码解析

    Java集合---Array类源码解析              ---转自:牛奶.不加糖 一.Arrays.sort()数组排序 Java Arrays中提供了对所有类型的排序.其中主要分为Prim ...

  5. Java 集合常用方法锦集

    Java集合非常的重要,尤其在业务中,如果你在熟练的使用Java数据结果的集合工作,将会大大的提高工作效率,减少代码量. 1.集合的互换 1.1 Map转Set Map<Integer, Str ...

  6. 《java集合概述》

    JAVA集合概述: Collection: |---List有序的:通过索引就可以精确的操作集合中的元素.元素是可以重复的. List提供了增删改查的动作. 增加add(element) add(in ...

  7. java 集合:实现

    集合本来就是为了方便开发的,实现了一些基本数据结构,一般来说数据结构有两种物理的实现:数组和链表.数组是连续的空间,链表是不连续的.基于这两种又扩展了很多的数据结构.队列,栈,hash表,树. 在ja ...

  8. Java提高篇(三五)-----Java集合细节(一):请为集合指定初始容量

    集合是我们在Java编程中使用非常广泛的,它就像大海,海纳百川,像万能容器,盛装万物,而且这个大海,万能容器还可以无限变大(如果条件允许).当这个海.容器的量变得非常大的时候,它的初始容量就会显得很重 ...

  9. Java集合源码分析(三)LinkedList

    LinkedList简介 LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈.队列和双端队列来使用. LinkedList同样是非线程安全 ...

随机推荐

  1. Docker学习(十)Docker容器编排 Docker-compose

    Docker学习(十)Docker容器编排 Docker-compose 标签(空格分隔): docker 容器编排是什么 应用一般由单独容器化的组件组成,须按照一定顺序在网络级别进行组织,以使其能够 ...

  2. MySQL军规升级版(转)

    一.基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8,必要时候使用utf8mb4 解读:(1)通用,无乱码风险,汉字3字节,英文1字节(2)utf8mb4是utf8的超集,有存储4字 ...

  3. python 获取一个网页里的a 标签

    #!/usr/bin/python # -*- coding: utf-8 -*- #encoding=utf-8 #Filename:urllib2-header.py import re impo ...

  4. 微软 的 github的 weiapi dotnet的 也有了 作为菜 只有欣赏的额

    step one 猛戳 dotnet-apiweb

  5. PairProgramming 个人第三次作业

    Github地址:主仓库 https://github.com/Yanyixiao/PairProgramming.git Partner博客园地址: https://www.cnblogs.com/ ...

  6. java正则使用全记录!

    一 开坑! 场景: 将动态uri中{} 替换成 至少出现一次的任意字符进行匹配, 比如 loclahost:8080/{name}/{9527}  -> localhost:8080/.{1,} ...

  7. 2020 University Rankings US News(亚洲)

    2020 University Rankings US News(亚洲)

  8. python学习Day06--编码

    [主要内容] 1. is 和 == 区别 id()函数 == 判断两边的值 is 判断内存地址回顾编码: 1. ASCII: 英文, 特殊字符, 数字, 8bit, 1byte 2. GBK: 中文 ...

  9. Flutter 入门 --- 内部分享

    八月部门给分配的分享任务,由于项目太赶,推迟一个月. 选 Flutter 这个主题,是因为现在它慢慢流行起来了,而我却不了解,故而借此契机,上手试试. 简介 Flutter 是 Google 推出的跨 ...

  10. ROS中的3D建模机器人(三)

    一.利用xacro理解机器人建模 当我们创建复杂的机器人模型时,URDF的灵活性将会降低,URDF缺少的主要特性是简单的.可重用性,模块化和可编程性. URDF是一个单独的文件我们不能在它里面包含其他 ...