发表在 java 08-29 20:11:55
http://kids.codepku.com/topic/view/655
本贴是对上述地址的问题思考。
问题:
李白街上走,提壶去买酒,遇店加一倍,见花喝一斗。途中遇5次店,见10次花,壶中原有2斗酒,最后刚好遇见花,刚好喝完酒,求可能的解。
这种问题其实很简单,只要简单粗暴的处理即可:
我们只需要让李白去街上喝酒这件事重复推演多次即可(比如一百万次)。
下面是实际代码:
package com.deom;
import java.util.ArrayList;
/**
* 关于李白喝酒问题的解答
* 问题:
* 李白街上走,提壶去买酒,遇店加一倍,见花喝一斗。途中遇5次店,
* 见10次花,壶中原有2斗酒,最后刚好遇见花,刚好喝完酒,求可能的
* 解。
* @author Fordring
*
*/
public class Demo10 {
public static void main(String[] args) {
long t = System.currentTimeMillis();
iner list = new iner();
for(int i =0;i<1000000;i++){//循环一百万次
StringBuilder sb =new StringBuilder();
sb.append("李白有2斗酒,");
int has = 2;//有2斗酒
int missShop = 0;//遇到店的次数
int missFlower =0;//遇到花的次数
while(true){
if(missShop==5&&missFlower==10){
if(has==0){
sb.setCharAt(sb.length()-1, '。');
list.add(sb.toString());
}
break;
}
if(has==0){
break;
}
switch((int)(Math.random()*2)){
case 0://遇到店
if(missShop<5&&has>=0){
missShop++;
has*=2;
sb.append("然后遇到了酒店,剩余"+has+"斗酒,");
}
break;
case 1://遇到花
if(missShop<10&&has>=0){
missFlower++;
has--;
sb.append("然后遇到了花,剩余"+has+"斗酒,");
}
break;
}
}
}
int i = 0;
for(Object str:list.toStringArray()){
i++;
System.out.println("\n 第"+i+"中情况:");
System.out.println(str.toString());
}
System.out.println("\n\n综合报告:\n\t循环了一百万次,总共耗时:"+(System.currentTimeMillis()-t)/1000.0+"s");
System.out.println("\t总计情况数:"+i+"种情况");
}
/**
* 该类用于处理集合问题
*/
static class iner{
//储存所有的可能解
private ArrayList<String> list ;
/**
* 构造器初始化list
*/
public iner() {
list =new ArrayList<String>();
}
/**
* 用于操作list,为list添加所有的可能解,并防止重复。
* @param str 添加的解
*/
public void add(String str){
for(Object i:list.toArray()){
if(i.toString().equals(str)){
return;
}
}
list.add(str);
}
/**
* 用于返回结果
* @return
*/
public Object[] toStringArray(){
return list.toArray();
}
}
}
然后运行程序得到的结果:
第1中情况:
李白有2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了酒店,剩余6斗酒,然后遇到了花,剩余5斗酒,然后遇到了花,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第2中情况:
李白有2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第3中情况:
李白有2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第4中情况:
李白有2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第5中情况:
李白有2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了酒店,剩余6斗酒,然后遇到了花,剩余5斗酒,然后遇到了花,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第6中情况:
李白有2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第7中情况:
李白有2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第8中情况:
李白有2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第9中情况:
李白有2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第10中情况:
李白有2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第11中情况:
李白有2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了酒店,剩余6斗酒,然后遇到了花,剩余5斗酒,然后遇到了花,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第12中情况:
李白有2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第13中情况:
李白有2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
第14中情况:
李白有2斗酒,然后遇到了酒店,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了酒店,剩余6斗酒,然后遇到了花,剩余5斗酒,然后遇到了花,剩余4斗酒,然后遇到了花,剩余3斗酒,然后遇到了花,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了酒店,剩余2斗酒,然后遇到了花,剩余1斗酒,然后遇到了花,剩余0斗酒。
综合报告:
循环了一百万次,总共耗时:3.511s
总计情况数:14种情况
基于数学明显不严谨
c++看懂了!!!
服气!