通常java中的ranValue指什么_面试题 -- 1到50个数,每次去掉两个数,增加两个数差的绝对值,最后剩什么数?为什么?...

逛网页的时候,发现阿里巴巴2014校园招聘笔试最后一道题目

http://blog.csdn.net/qingsong3333/article/details/11910771

题目:在黑板上写下50个数字:1至50.在接下来的49轮操作中,每次做如下动作:选取两个黑板上的数字a和b,擦去,在黑板上写|b - a|。请问最后一次动作之后剩下数字可能是什么?为什么?

我的分析:由于擦除数字的随机性,最后一定不是某个具体的数字,唯独能确定的的奇数还是偶数。

我的答案最后是个奇数,原因如下:

首先对可能擦除的种类进行分析,有三种可能:

1. 擦除两个奇数 Num1 和Num2, 擦除后新增一个偶数 Num3 = |Num1 - Num2|

在这种情况下 Num1 + Num2 - |Num1 - Num2| 是偶数,也就是说,这种情况下,剩余数字总和将减小一个偶数值

2. 擦除两个偶数Num1 和 Num2, 擦除后新增一个偶数Num3 = |Num1 -Num2|

在这种情况下 Num1 + Num2 - |Num1 - Num2| 还是偶数,也就是说,这种情况下,剩余数字总和还是会减少一个偶数值。

3. 擦除一个偶数(Num1)一个奇数(Num2), 擦除后新增一个奇数Num3 = |Num1 - num2|, 在这种情况下 Num1+Num2 - Num3 还是偶数,也就是说,在这种情况下剩余数字总和还是会减少一个偶数值。

上述三种可能的情况可以看出,不管是哪一种情况,每次操作都将减少一个偶数值。

这样,最后剩余的奇数还是偶数,我们只要看一下1到50的总和是奇数或者偶数即可。

1到50的和是1275,是一个奇数,这样我们的结果便是奇数,因为每次擦除操作减少的都是偶数。

下面用程序来运行一下,也能发现最后的数字是一个奇数。

程序如下:class="java" name="code">package my.thread;

import java.util.LinkedList;

import java.util.List;

import java.util.Random;

/**

*

* @author Eric

*

*/

public class AlibabaExample {

public static void main(String[] args) {

AlibabaExample example = new AlibabaExample();

int lastIntValue = 0;

for (int i = 0; i < 100; i++) {

lastIntValue = example.populateLastRemainingNumber();

System.out.println(String.format("第%d次运行,最后剩余的数是--> %d, 是个%s",

i + 1, lastIntValue, lastIntValue % 2 == 0 ? "偶数" : "奇数"));

}

}

public int populateLastRemainingNumber() {

List intList = initList();

Random ran = new Random();

int size = 0;

int ranIndex1 = 0;

int ranIndex2 = 0;

int num1 = 0;

int num2 = 0;

for (int i = 0; i < 49; i++) {

size = intList.size();

ranIndex1 = ran.nextInt(size);

while (true) {

ranIndex2 = ran.nextInt(size);

if (ranIndex1 != ranIndex2) {

break;

}

}

num1 = intList.get(ranIndex1);

num2 = intList.get(ranIndex2);

intList.remove(ranIndex1);

if (ranIndex1 > ranIndex2) {

intList.remove(ranIndex2);

} else {

intList.remove(ranIndex2 - 1);

}

intList.add(Math.abs(num1 - num2));

}

return intList.get(0);

}

private List initList() {

List intList = new LinkedList();

for (int i = 1; i < 51; i++) {

intList.add(i);

}

return intList;

}

}

某次运行的结果:

第1次运行,最后剩余的数是--> 13, 是个奇数

第2次运行,最后剩余的数是--> 9, 是个奇数

第3次运行,最后剩余的数是--> 13, 是个奇数

第4次运行,最后剩余的数是--> 27, 是个奇数

第5次运行,最后剩余的数是--> 1, 是个奇数

第6次运行,最后剩余的数是--> 7, 是个奇数

第7次运行,最后剩余的数是--> 7, 是个奇数

第8次运行,最后剩余的数是--> 3, 是个奇数

第9次运行,最后剩余的数是--> 13, 是个奇数

第10次运行,最后剩余的数是--> 11, 是个奇数

第11次运行,最后剩余的数是--> 1, 是个奇数

第12次运行,最后剩余的数是--> 15, 是个奇数

第13次运行,最后剩余的数是--> 13, 是个奇数

第14次运行,最后剩余的数是--> 17, 是个奇数

第15次运行,最后剩余的数是--> 1, 是个奇数

第16次运行,最后剩余的数是--> 7, 是个奇数

第17次运行,最后剩余的数是--> 15, 是个奇数

第18次运行,最后剩余的数是--> 21, 是个奇数

第19次运行,最后剩余的数是--> 7, 是个奇数

第20次运行,最后剩余的数是--> 11, 是个奇数

第21次运行,最后剩余的数是--> 1, 是个奇数

第22次运行,最后剩余的数是--> 1, 是个奇数

第23次运行,最后剩余的数是--> 19, 是个奇数

第24次运行,最后剩余的数是--> 17, 是个奇数

第25次运行,最后剩余的数是--> 9, 是个奇数

第26次运行,最后剩余的数是--> 15, 是个奇数

第27次运行,最后剩余的数是--> 9, 是个奇数

第28次运行,最后剩余的数是--> 7, 是个奇数

第29次运行,最后剩余的数是--> 23, 是个奇数

第30次运行,最后剩余的数是--> 17, 是个奇数

第31次运行,最后剩余的数是--> 13, 是个奇数

第32次运行,最后剩余的数是--> 27, 是个奇数

第33次运行,最后剩余的数是--> 15, 是个奇数

第34次运行,最后剩余的数是--> 11, 是个奇数

第35次运行,最后剩余的数是--> 21, 是个奇数

第36次运行,最后剩余的数是--> 9, 是个奇数

第37次运行,最后剩余的数是--> 11, 是个奇数

第38次运行,最后剩余的数是--> 7, 是个奇数

第39次运行,最后剩余的数是--> 3, 是个奇数

第40次运行,最后剩余的数是--> 11, 是个奇数

第41次运行,最后剩余的数是--> 9, 是个奇数

第42次运行,最后剩余的数是--> 11, 是个奇数

第43次运行,最后剩余的数是--> 23, 是个奇数

第44次运行,最后剩余的数是--> 7, 是个奇数

第45次运行,最后剩余的数是--> 5, 是个奇数

第46次运行,最后剩余的数是--> 11, 是个奇数

第47次运行,最后剩余的数是--> 25, 是个奇数

第48次运行,最后剩余的数是--> 29, 是个奇数

第49次运行,最后剩余的数是--> 15, 是个奇数

第50次运行,最后剩余的数是--> 3, 是个奇数

第51次运行,最后剩余的数是--> 9, 是个奇数

第52次运行,最后剩余的数是--> 5, 是个奇数

第53次运行,最后剩余的数是--> 1, 是个奇数

第54次运行,最后剩余的数是--> 21, 是个奇数

第55次运行,最后剩余的数是--> 1, 是个奇数

第56次运行,最后剩余的数是--> 33, 是个奇数

第57次运行,最后剩余的数是--> 9, 是个奇数

第58次运行,最后剩余的数是--> 15, 是个奇数

第59次运行,最后剩余的数是--> 1, 是个奇数

第60次运行,最后剩余的数是--> 5, 是个奇数

第61次运行,最后剩余的数是--> 3, 是个奇数

第62次运行,最后剩余的数是--> 29, 是个奇数

第63次运行,最后剩余的数是--> 11, 是个奇数

第64次运行,最后剩余的数是--> 13, 是个奇数

第65次运行,最后剩余的数是--> 3, 是个奇数

第66次运行,最后剩余的数是--> 5, 是个奇数

第67次运行,最后剩余的数是--> 9, 是个奇数

第68次运行,最后剩余的数是--> 7, 是个奇数

第69次运行,最后剩余的数是--> 7, 是个奇数

第70次运行,最后剩余的数是--> 19, 是个奇数

第71次运行,最后剩余的数是--> 7, 是个奇数

第72次运行,最后剩余的数是--> 25, 是个奇数

第73次运行,最后剩余的数是--> 1, 是个奇数

第74次运行,最后剩余的数是--> 3, 是个奇数

第75次运行,最后剩余的数是--> 5, 是个奇数

第76次运行,最后剩余的数是--> 13, 是个奇数

第77次运行,最后剩余的数是--> 15, 是个奇数

第78次运行,最后剩余的数是--> 15, 是个奇数

第79次运行,最后剩余的数是--> 9, 是个奇数

第80次运行,最后剩余的数是--> 15, 是个奇数

第81次运行,最后剩余的数是--> 19, 是个奇数

第82次运行,最后剩余的数是--> 3, 是个奇数

第83次运行,最后剩余的数是--> 7, 是个奇数

第84次运行,最后剩余的数是--> 3, 是个奇数

第85次运行,最后剩余的数是--> 15, 是个奇数

第86次运行,最后剩余的数是--> 13, 是个奇数

第87次运行,最后剩余的数是--> 5, 是个奇数

第88次运行,最后剩余的数是--> 9, 是个奇数

第89次运行,最后剩余的数是--> 3, 是个奇数

第90次运行,最后剩余的数是--> 29, 是个奇数

第91次运行,最后剩余的数是--> 5, 是个奇数

第92次运行,最后剩余的数是--> 11, 是个奇数

第93次运行,最后剩余的数是--> 15, 是个奇数

第94次运行,最后剩余的数是--> 15, 是个奇数

第95次运行,最后剩余的数是--> 5, 是个奇数

第96次运行,最后剩余的数是--> 31, 是个奇数

第97次运行,最后剩余的数是--> 5, 是个奇数

第98次运行,最后剩余的数是--> 1, 是个奇数

第99次运行,最后剩余的数是--> 9, 是个奇数

第100次运行,最后剩余的数是--> 23, 是个奇数

转载请注明出处:http://mouselearnjava.iteye.com/blog/1949605

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值