今天看到一个小学数学题----"1-99中随意选两个数, 两值不相等,且和小于100,问有多少中可能.".
解法一, 编程思维(普通程序员).
双重for循环.if判断.集合去重. 硬编码, 简单快速
则,得解...
解法二,数学思维(学霸程序员).
1+2,1+3,...1+98 --> 97种情况
2+3,2+4....2+97 --> 95种情况
...
49+50 --> 1种情况.
应用 数学归纳法, 得 等差数列求和的公式
则,得解... 不需要程序.
解法三.编程思维(2b程序员).
最后剩下的就是这种情况.把简单问题极度复杂化的情况. 如下代码.
(面向对象,集合类,jdk8..)
package com.dudo.dailytest; import java.util.*; import java.util.concurrent.CopyOnWriteArraySet; /** * Created by zkai on 2014/12/3. */ public class PrimarySchoolTopic { private class Nums implements Comparable { private int a; private int b; public Nums(int a, int b) { this.a = a; this.b = b; } public boolean verify() { return verifyNum(a) && verifyNum(b) && a != b && a + b < maxSum; } private boolean verifyNum(int i) { return i >= min && i <= max; } @Override public int hashCode() { return getStr().hashCode(); } private String getStr() { String format; if (a > b) { format = String.format("%s+%s=%s", b, a, a + b); } else { format = String.format("%s+%s=%s", a, b, a + b); } return format; } @Override public String toString() { return getStr(); } @Override public boolean equals(Object obj) { if (obj == null || !(obj instanceof Nums)) { return false; } Nums two = (Nums) obj; return (this.a == two.a && this.b == two.b) || (this.a == two.b && this.b == two.a); } // case 2 @Override public int compareTo(Object obj) { if (obj == null || !(obj instanceof Nums)) { return -1; } Nums two = (Nums) obj; return two.a == a ? two.b == b ? 0 : two.b - b : two.a - a; } } public static void main(String[] args) { PrimarySchoolTopic topic = new PrimarySchoolTopic(1, 99, 100); topic.compute().print(); } private int min; private int max; private int maxSum; Set<Nums> numCount = new HashSet<>(); // case1 需要实现hashCode().equals(). // Set<Nums> numCount = new TreeSet<>(); // case2 需要实现 Comparable.compareTo() [或在构造时传入 Comparator] // Set<Nums> numCount = new CopyOnWriteArraySet<>(); // case3 仅需要 equals(). public PrimarySchoolTopic(int min, int max, int maxSum) { this.min = min; this.max = max; this.maxSum = maxSum; } public PrimarySchoolTopic compute() { for (int i = min; i <= max; i++) { for (int j = min; j <= max; j++) { Nums nums = new Nums(i, j); if (nums.verify()) { numCount.add(nums); } } } return this; } public int size() { return numCount.size(); } public PrimarySchoolTopic print() { numCount.forEach(System.out::println); System.out.println(numCount.size()); return this; } }
=========== 华丽分割线 以下为java复习内容 ==========================
1. hashSet --- equals. hashCode.
2. treeSet --- 比较器
3. arrayset --- equals
4. jdk8 foreach
5. jdk8 function 编程.
6. .....
相关推荐
教师用户通过教师工号登录进入小学数学在线测试系统后,通过题库管理可以按照题目类型进行试题的内容添加,包括单选多项、填空判断等类型,借助试卷管理模块实现在线试卷生成,利用成绩统计可以查看到学生成绩、错题...
教师用户通过教师工号登录进入小学数学在线测试系统后,通过题库管理可以按照题目类型进行试题的内容添加,包括单选多项、填空判断等类型,借助试卷管理模块实现在线试卷生成,利用成绩统计可以查看到学生成绩、错题...
教师用户通过教师工号登录进入小学数学在线测试系统后,通过题库管理可以按照题目类型进行试题的内容添加,包括单选多项、填空判断等类型,借助试卷管理模块实现在线试卷生成,利用成绩统计可以查看到学生成绩、错题...
教师用户通过教师工号登录进入小学数学在线测试系统后,通过题库管理可以按照题目类型进行试题的内容添加,包括单选多项、填空判断等类型,借助试卷管理模块实现在线试卷生成,利用成绩统计可以查看到学生成绩、错题...
借助jclasslib与javassist修改java class字节码.doc
基于 Java Swing + 人脸识别编写的学校考试系统源代码Java基础大作业 几乎涵盖了 Java 基础面向对象,封装继承多态,I/O 流,多线程,网络,数据库的所有知识 项目用到的主要技术 利用阿里云的短信API服务提供登录...
Java 借助163或qq等邮箱发送邮件工具类 基础内容 不涉及图片附件等
java学习入门PPt,从java的构建,到具体的例子,详细的介绍了java的使用。对于初学者来说是很合适的一部教程,可以帮初学者明确很多概念,更好的理解java。
Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新...
java语言基础、 流程控制、 数组及其常用操作、 面向对象入门、 面向对象进阶、 字符串与包装类、 java集合类框架、 常用数学工具类、 错误处理、 输入/输出、 枚举类型与泛型、 swing入门、 多线程、 网络通信和...
第3章 Java语言基础 15 实例011 输出错误信息与调试信息 16 实例012 从控制台接收输入字符 16 实例013 重定向输出流实现程序日志 17 实例014 自动类型转换与强制类型转换 19 实例015 加密可以这样简单(位运算) 20 ...
通过阅读本书,你可以借助J2SE 5.0这个最新、最出色的Java平台来学习Java编程。J2SE 5.0拥有强大的新特性和新功能,使Java性能产生了巨大的飞跃。新的Java平台所带来的丰富内涵使本书相比于过去的版本似乎稍厚了些...
河北省2019年中考数学复习第二部分热点专题突破专题二借助数学模型解决实际问题试题含解析
java借助Excle模板生成定制化PDF文件 功能:通过可配置的Excle模板生成PDF文件,并通过浏览器输出到客户端。 实现思路:该功能通过三个步骤实现 第一:服务器端通过excle模板生成Excle文件 第二:通过jacob,将...
借助浏览器控件利用CSS和JavaScript设计Java桌面程序界面
鸿蒙自学知识点demo java语言,包含所有基础知识应用,可以借助这个demo进行工具类封装
借助于漫画展示的形式,面向对象的简、由类创建一个对象的方法、类的编写与对象的创建、类的构造函数、类的方法、修饰符、Java中的封装/继承/多态等特征、Java中的线程、用Java创建一个小世界、多线程共享数据,以及...
用Java实现的UDP穿透NAT技术,内有详细的注释,完全可以自己看懂的
欢迎下载,借助Intent实现Android工程中Activity之间Java对象的传递.zip