Java源码-一筐鸡蛋问题的Java解法

朋友圈里看到一篇帖子:

一筐鸡蛋: 1个1个拿,正好拿完。 2个2个拿,还剩1个。 3个3个拿,正好拿完。 4个4个拿,还剩1个。 5个5个拿,还剩4个。 6个6个拿,还剩3个。 7个7个拿,正好拿完。 8个8个拿,还剩1个。 9个9个拿,正好拿完。 问筐里有多少鸡蛋?


作为一个曾经的“学霸”,碰到这种问题总是如同强迫症发作一样,不解决就看着难受。

果然,这种题目看似小学生都能解,其实真要一板一眼推理出来,还真不简单。好吧,推理不是咱的强项,那就用“暴力”解决问题吧。写一段程序,让电脑帮我筛选符合条件的数字也是一种方法呀。


代码如下:

package iJava;

public class TargetNumber 
{
public static void main(String[] args)
{
 
   int targetNumber=1; 
   int count=0;
   boolean condition=false;
   int[] numbers=new int[10];
   
   while (count!=10){
	targetNumber++;
	condition=(targetNumber%2==1)&&(targetNumber%3==0)
			&&(targetNumber%4==1)&&(targetNumber%5==4)
			&&(targetNumber%6==3)&&(targetNumber%7==0)
			&&(targetNumber%8==1)&&(targetNumber%9==0);
	if (condition){
		count++;
		numbers[count-1]=targetNumber;
	}
}
   System.out.println("Target Number are:");
   for (int i=1;i<=numbers.length;i++){
   System.out.println(numbers[i-1]);} 
} 
} 


运行结果:

Target Number are:
1449
3969
6489
9009
11529
14049
16569
19089
21609
24129


不难发现,结果是一个等差数列:1449+2520*(n-1),其中2520为数字1至9这9个数的最小公倍数(Excel公式为:LCM())


有了这段代码,管你什么类型的“一筐鸡蛋”,只要稍微改改代码,就可迅速获取答案。


如:韩信带1500名兵士打仗,战死四五百人,站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。韩信马上说出人数:1049。


Target Number are:
104
209
314
419
524
629
734
839
944
1049


当然,如果我们不会编程,那只能回退到推理的老路上来了。以下内容转自网络,算是比较专业的解法。

在一千多年前的《 孙子算经》中,有这样一道算术题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”按照今天的话来说:一个数除以3余2,除以5余3,除以7余2,求这个数。这样的问题,也有人称为“韩信点兵”。它形成了一类问题,也就是 初等数论中的解同余式。
①有一个数,除以3余2,除以4余1,问这个数除以12余几?
解:除以3余2的数有:2,5,8,11,14,17,20,23……
它们除以12的余数是:2,5,8,11,2,5,8,11……
除以4余1的数有:1,5,9,13,17,21,25,29……
它们除以12的余数是:1,5,9,1,5,9……
一个数除以12的余数是唯一的.上面两行余数中,只有5是共同的,因此这个数除以12的余数是5。如果我们把①的问题改变一下,不求被12除的余数,而是求这个数。很明显,满足条件的数是很多的,它是5+12×整数,整数可以取0,1,2,……,无穷无尽。
事实上,我们首先找出5后,注意到12是3与4的 最小公倍数,再加上12的整数倍,就都是满足条件的数.这样就是把“除以3余2,除以4余1”两个条件合并成“除以12余5”一个条件。
孙子算经》提出的问题有三个条件,我们可以先把两个条件合并成一个.然后再与第三个条件合并,就可找到答案。”



  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值