开源-关于李白喝酒问题简单粗暴的解法。

发表在    java 08-29 20:11:55

1 3609 3

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种情况


登录或注册后发布评论