从1到100 000 中任意拿掉两个数字,把剩下的99998个数顺序打乱,并且放入数组A中。
要求只扫描一遍,把这两个数找出来;可以使用最多不超过5个局部变量,不能使用数组变量,并且不能改变原数组的值。
package m2010_09_14;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author qmhuang 2010-09-14
* 从1到100 000 中任意拿掉两个数字,把剩下的99998个数顺序打乱,并且放入数组A中。
* 要求只扫描一遍,把这两个数找出来;可以使用最多不超过5个局部变量,不能使用数组变量,并且不能改变原数组的值。
*/
public class Test2 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
// 四个局部变量
BigInteger x = BigInteger.valueOf(0);
BigInteger y = BigInteger.valueOf(1);
BigInteger sum = BigInteger.valueOf(0);
BigInteger ji = BigInteger.valueOf(1);
//先将1到10000存入到一个list里面,并一起将1到10000的和跟积求出来,保存到sum、ji
for (int i = 1; i <= 10000; i++) {
list.add(i);
sum = sum.add(BigInteger.valueOf(i));
ji = ji.multiply(BigInteger.valueOf(i));
}
//任意拿掉的两个数字
list.remove(new Integer(10));
list.remove(new Integer(2));
//再次求出这个list的和跟积,保存到x、y
for (Integer i : list) {
x = x.add(BigInteger.valueOf(i));
y = y.multiply(BigInteger.valueOf(i));
}
//求出拿掉两个数字的和跟积,保存在sum、ji
sum = sum.subtract(x);
ji = ji.divide(y);
//假设这两个数为a、b,则他们满足a+b=sum,a*b=ji,因此
//i.intValue() % i == 0 && (ji.intValue() / i + i) == sum.intValue()这个就是我们的条件
for (int i = 1; i < sum.intValue(); i++) {
if (ji.intValue() % i == 0
&& (ji.intValue() / i + i) == sum.intValue()) {
System.out.println("这两个数为:" + i + "、" + ji.intValue() / i);
}
}
}
}
上面我没有用数组,觉得数组比较麻烦就用了List,还有就是在写的过程中发现老是出现,什么结果都变成0了,原来是在求积的时候,超出了int的范围,没多想改用long,结果还是超出,后来就直接用了BigInteger。我觉得我这求出积,再得到拿掉的两个数的积方法很不好,不知道大家有什么好的方法没有?
分享到:
相关推荐
"100家大公司Java笔试题汇总.doc"这份文档提供了丰富的实践材料,建议考生们深入研究每一道题,不仅要找出正确答案,还要理解背后的原理,这样才能在真正的笔试中游刃有余,成功叩开心仪企业的门扉。同时,通过反复...
"java面试题_leetcode题解之第31题下一个排列" 的描述进一步确认了这是关于Java面试中的一道算法题目的解答,主要关注如何找到一个排列的下一个排列。在面试中,这样的问题通常用来评估候选人在处理数组操作和算法...
Java面试题涵盖了许多核心知识点,包括基础技术、项目经验、逻辑推理和SQL查询。下面将对这些方面进行详细的解析。 1. **基础技术题** - **UML图**:UML(统一建模语言)有多种图表,包括类图、对象图、用例图、...
Java笔试题大集合是针对Java开发者进行技术面试和求职准备的重要资源,涵盖了广泛的知识点,旨在测试应聘者的编程基础、算法理解、数据结构、多线程、网络、数据库以及Java特性的掌握程度。这个大礼包通常包含不同...
笔试面试题 一道面试题关于信息系统的问答和注意事项 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的...
在Java面试中,LeetCode题目经常被...以上就是关于Java面试题LeetCode第69题"寻找x的平方根"的详细解答,这个题目不仅考察了算法设计能力,还涉及了数值计算、边界处理和代码优化等多个方面,是面试中常见的经典问题。
【Java经典笔试题详解】 Java作为一门广泛应用的编程语言,其笔试题目往往涵盖了语言特性、设计模式、数据结构与算法、面向对象编程、框架及软件工程等多个方面。以下是对一些常见笔试题目的详细解答: 1. **设计...
Java程序员在面试中可能会...理解这些Java面试题的解答可以帮助面试者更好地准备面试,加深对Java核心概念的理解,并展示他们在实际开发中的应用能力。对于Java程序员来说,扎实的基础知识和实践经验都是至关重要的。
在Java面试中,LeetCode题目经常被用来评估候选人的编程能力与问题解决技巧。第35题“搜索插入位置”是一道典型的算法题,旨在测试面试者的数组处理和二分查找算法的应用。在这个问题中,我们需要在一个排序好的整数...
Java面试题中的LeetCode题目,尤其是像“第一个错误的版本”这样的问题,旨在考察候选人的编程基础、算法理解以及问题解决能力。通过解答此类问题,面试者能够展示他们的逻辑思维、代码实现和优化技巧,这些都是在...
在Java面试中,LeetCode题目经常被用来评估候选人的编程能力与算法理解。第374题“猜数字大小”(Guess Number Higher or Lower)是一个经典的猜数字游戏,旨在测试你的二分查找和逻辑推理技能。以下是这个题目的...
Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而闻名。这份“Java题库”包含了15套题目,旨在帮助学习者...建议逐一解答并理解每一道题,结合实际编程练习,以巩固理论知识并提升实战能力。
标题中的“一道笔试题”可能是指一个编程或技术问题,而描述中提到的“程序员的笔试题”进一步确认了这是一个与编程或IT技术相关的题目。虽然没有提供具体的问题内容,但我们可以通过标签“获取远程数据”来推测这个...
【标题】:“百度面试、笔试题全集”涵盖了百度公司在招聘过程中可能会遇到的各种技术与非技术类题目,旨在帮助应聘者全面了解并准备百度的面试和笔试环节。这个资源集合了众多历年的真实试题,是求职者提升自我能力...
“笔试题”则明确表示这是针对技术面试的准备材料。 【压缩包子文件的文件名称列表】:百度技术研发笔试题目.doc、百度.doc、百度试题.doc 从文件名来看,我们可以期待三份文档,分别可能是百度技术研发的笔试题目...
当然,这只是Java笔试题可能涵盖的一些方向,并非具体的题目解答。在面对任何问题时,保持冷静,认真分析问题的本质,运用已有的知识去解决问题,是每个程序员都需要具备的能力。不论你是否已经是大神,还是正在努力...
【完美世界笔试题.zip】是2019年完美世界公司为应聘者准备的...对于“完美世界笔试题”这个压缩文件,解压后应仔细阅读每一道题目,理解其背后的理论,并尝试解答,以此来检验自己的技术水平和提升自己的面试竞争力。
本题解将重点解析LeetCode中的一道面试题——第1207题:“独一无二的出现次数”(Unique Number of Occurrences)。这道题目涉及到了哈希表这一数据结构的应用,对于理解和掌握哈希表在实际问题中的应用有着很好的...
题目未在描述或部分内容...以上只是Java基础知识的一部分,实际的Java面试题可能涉及这些概念的具体应用,例如内存管理、垃圾收集、并发控制、设计模式等。如果你遇到具体的Java题目,欢迎分享,我会尽我所能帮助解答。
在Java面试中,LeetCode是一个经常被提及的平台,它提供了大量的编程题目,帮助开发者提升算法和编程技能。其中,第3题“无重复字符的最长子串”是一道非常经典的字符串处理问题,对于求职面试者来说,掌握这类问题...