首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

两数之和,两数之积

大家好,又见面了,我是你们的朋友全栈君。已知两个1~30之间的数字,甲知道两数之和,乙知道两数之积。 甲问乙:”你知道是哪两个数吗?”乙说:”不知道”; 乙问甲:”你知道是哪两个数吗?”甲说:”也不知道”; 于是,乙说:”那我知道了”; 随后甲也说:”那我也知道了”; 这两个数是什么? 答案: 答案1:为x=1,y=6;甲知道和A=x+y=7,乙知道积B=x*y=6 答案2:为x=1,y=8;甲知道和A=x+y=9,乙知道积B=x*y=8 解: 设这两个数为x,y. 甲知道两数之和 A=x+y; 乙知道两数之积 B=x*y; 该题分两种情况 : 允许重复, 有(1 <= x <= y <= 30); 不允许重复,有(1 <= x < y <= 30); 当不允许重复,即(1 <= x < y <= 30); 1)由题设条件:乙不知道答案 => B=x*y 解不唯一 => B=x*y 为非质数 又∵ x ≠ y ∴ B ≠ k*k (其中k∈N) 结论(推论1): B=x*y 非质数且 B ≠ k*k (其中k∈N) 即:B ∈(6,8,10,12,14,15,18,20…) 证明过程略。 2)由题设条件:甲不知道答案 <=> A=x+y 解不唯一 => A >= 5; 分两种情况: A=5,A=6时x,y有双解 A>=7 时x,y有三重及三重以上解 假设 A=x+y=5 则有双解 x1=1,y1=4; x2=2,y2=3 代入公式B=x*y: B1=x1*y1=1*4=4;(不满足推论1,舍去) B2=x2*y2=2*3=6; 得到唯一解x=2,y=3即甲知道答案。 与题设条件:”甲不知道答案”相矛盾, 故假设不成立,A=x+y≠5 假设 A=x+y=6 则有双解。 x1=1,y1=5; x2=2,y2=4 代入公式B=x*y: B1=x1*y1=1*5=5;(不满足推论1,舍去) B2=x2*y2=2*4=8; 得到唯一解x=2,y=4 即甲知道答案 与题设条件:”甲不知道答案”相矛盾 故假设不成立,A=x+y≠6 当A>=7时 ∵ x,y的解至少存在两种满足推论1的解 B1=x1*y1=2*(A-2) B2=x2*y2=3*(A-3) ∴ 符合条件 结论(推论2):A >= 7 3)由题设条件:乙说”那我知道了” =>乙通过已知条件B=x*y及推论(1)(2)可以得出唯一解 即: A=x+y, A >= 7 B=x*y, B ∈(6,8,10,12,14,15,16,18,20…) 1 <= x < y <= 30 x,y存在唯一解 当 B=6 时:有两组解 x1=1,y1=6 x2=2,y2=3 (∵ x2+y2=2+3=5 < 7∴不合题意,舍去) 得到唯一解 x=1,y=6 当 B=8 时:有两组解 x1=1,y1=8 x2=2,y2=4 (∵ x2+y2=2+4=6 < 7∴不合题意,舍去) 得到唯一解 x=1,y=8 当 B>8 时:容易证明均为多重解 结论: 当B=6时有唯一解 x=1,y=6当B=8时有唯一解 x=1,y=8 4)由题设条件:甲说”那我也知道了” => 甲通过已知条件A=x+y及推论(3)可以得出唯一解 综上所述,原题所求有两组解: x1=1,y1=6 x2=1,y2=8 当x<=y时,有(1 <= x <= y <= 30); 同理可得唯一解 x=1,y=4

03
您找到你想要的搜索结果了吗?
是的
没有找到

hashCode与equals方法之间的关系

hashCode 顾名思义是一个“散列值码” 散列值,并不能表现其唯一性,但是有离散性,其意义在于类似于进行hashMap等操作时,加快对象比较的速度,进而加快对象搜索的速度。 hashCode 和 equals的关系。 两个对象 equals的时候,hashCode必须相等,但hashCode相等,对象不一定equals。 如果没有重写 hashcode方法,使用Object自带的hashCode,无法保证两个对象equals的时候 hashCode 必须相等的条件。 在Java中,重写equals()方法之后,是否需要重写hashCode()方法,那要看分情况来说明。有些情况下,是建议;有些情况下,是必须重写。 首先说建议的情况:    比如你的对象想放到Set集合或者是想作为Map的key时,那么你必须重写equals()方法,这样才能保证唯一性。当然,在这种情况下,你不想重写hashCode()方法,也没有错。但是,对于良好的编程风格而言,你应该在重写equals()方法的同时,也重写hashCode()方法。 必须重写hashCode()的情况:     如果你的对象想放进散列存储的集合中(比如:HashSet,LinkedHashSet)或者想作为散列Map(例如:HashMap,LinkedHashMap等等)的Key时,在重写equals()方法的同时,必须重写hashCode()方法。 最后明白两点就行了: 1.hashCode()方法存在的主要目的就是提高效率。 2.在集合中判断两个对象相等的条件,其实无论是往集合中存数据,还是从集合中取数据,包括如果控制唯一性等,都是用这个条件判断的,条件如下:     首先判断两个对象的hashCode是否相等,如果不相等,就认为这两个对象不相等,就完成了。如果相等,才会判断两个对象的equals()是否相等,如果不相等,就认为这两个对象不相等,如果相等,那就认为这两个对象相等。     上面的条件对于任何集合都是如此,只要理解上面的条件,你就明白了,为什么在有些情况下建议重写hashCode().有些情况下,是必须要重写的,只有一个目的,就是提高效率,你想想,如果你重写了hashCode(),只要不满足第一个条件,那就直接可以判断两个对象是不等的,也就不用花费时间再去比较equals了。 最后总结一句话就是,hashCode()方法存在的主要目的就是提高效率,但是如果你想把对象放到散列存储结构的集合中时,是必须要重写的。

03

这一次,要彻底理解TCP的三次握手!

一个常见的题目,说说 TCP 的三次握手,我们先来交代一下 IP 协议和 TCP 协议,我们都知道IP 协议是无连接的通信协议,它不会占用两个正在通信的计算机之间的通信线路。这样 IP 就降低了对网络线路的需求,每条线可以同时满足许多不同的计算机之间的通信需要,通过 IP 消息或者其他数据呢,会被分割为较小的,独立的包。并通过因特网在计算机之间传送 IP,负责将每个包路由至它的目的地。但 IP 协议呢,没有做任何事情来确认数据包是否按顺序发送,或者包是否被破坏。所以 IP 数据包呢,是不可靠的,需要由它的上层协议来做出控制,前面我们了解到传输控制协议 TCP 是属于传输层的协议。那传输控制协议呢?它的英文名是transmission control protocol缩写,就是我们的 TCP啦。

01
领券