[BOP][Beauty of Programming][MSRA] 从“买票问题”谈起

问题(买票问题):

在一场激烈的足球赛开始前,售票工作正在紧张地进行中。

已知:

1.每张球票为50元。

2.现在有2n个人排队购票,

其中有n个人手持50元钞票,另外n个人手持100元钞票,

假设开始售票时,售票处没有零钱。

问:这2n个人有多少种排队方式,不至使售票处出现找不开钱的局面?

摘要:

通过对买票找零问题的分析,迁移到括号匹配问题,得到递推式。并通过数学分析中级数幂级数知识,推导出递推式的通项,以此解决部分衍生问题。

这里符号怎么玩……

见外链吧

http://yunpan.cn/cQNjfVYTQ4PcW  访问密码 7549

---------------------------------------------------------------------------------------------------------

专业导论课论文……

写了好多天,感觉严重被 “大泽乡”坑了、、、

完全领悟不到他的评分依据、hhhhh。

烂在我硬盘里也浪费了、

发出来(好吧、也没人看)

时间: 2024-10-22 02:26:45

[BOP][Beauty of Programming][MSRA] 从“买票问题”谈起的相关文章

编程之美之买票找零

题目:假设有2N个人在排队买票,其中有N个人手持50元的钞票,另外有N个人手持100元的钞票,假设开始售票时,售票处没有零钱,问这2N个人有多少种排队方式,不至使售票处出现找不开钱的局面? 分析:队伍的序号标为0,1,...,2n-1,并把50元看作左括号,100元看作右括号,合法序列即括号能完成配对的序列.对于一个合法的序列,第0个一定是左括号,它必然与某个右括号配对,记其位置为k.那么从1到k-1.k+1到2n-1也分别是两个合法序列.那么,k必然是奇数(1到k-1一共有偶数个),设k=2i

电影院买票问题->排队找钱

问题:有2n个人排队进电影院,票价是50美分.在这2n个人当中,其中n个人只有50美分,另外n个人有1美元(纸票子).愚蠢的电影院开始卖票时1分钱也没有.问:有多少种排队方法使得每当一个拥有1美元买票时,电影院都有50美分找钱 注:1美元=100美分拥有1美元的人,拥有的是纸币,没法破成2个50美分 解析:符合卡特兰数( Catalan数),因此直接可以得出答案:(2n)/(n!*(n+1)!). Catalan数相关:令h(0)=1,h(1)=1: 1.catalan数满足递推式: h(n)=

简单的多线程买票模拟程序(lock解决多线程存在大安全隐患)

—————————————————————— jdk1.5的lock代替synchronized,condition封装 Object对象里sleep,wait,notify ,notifyAll —————————————————————— /*  需求:  写一个简单的多线程模拟买票的程序  四个买票窗口,一共有100张票 */import java.util.concurrent.locks.*;   class Tick implements Runnable{         priv

调查:近7成受访网友买票还找黄牛

过年了,很多在外工作了一年的人们,随着乡愁的召唤,又开始了一年一度的大迁徙.南都联合大粤网发起的网络民调,有1141名网友参与调查.数据显示,今年春运,81.68%的返乡旅客依然选择乘坐火车.可是回家的路并不轻松,截至1月15日,依然还有89 .92%的人没有买到回家的火车票.与之对应的是,今年春运铁路12306网站首次施行提前60天购票,除夕从广州向全国各方向的火车票一经发售,就被抢购一空.如何才能买到回家的车票?数据给出的结论是,67.75%的受访网友是通过找黄牛才买到票的. 调查结果显示,

简单的多线程买票模拟程序

/*  需求:  写一个简单的多线程模拟买票的程序  四个买票窗口,一共有100张票 */ class Tick implements Runnable{         private static  int tick=100;         private String window;         public  void windowName(String window){                 synchronized(Tick.class){              

线程模拟买票

存在问题:这时候启动了四个线程,那么tickets是一个成员变量,也就是在一个线程对象中都维护了属于自己的tickets属性,那么就总共存在了四份. 解决方案一:tickets使用staitc修饰,使每个线程对象都是共享一份属性. 1.1 创建线程的方式二 创建线程的第二种方式.使用Runnable接口. 该类中的代码就是对线程要执行的任务的定义. 1:定义了实现Runnable接口 2:重写Runnable接口中的run方法,就是将线程运行的代码放入在run方法中 3:通过Thread类建立线

排队买票

要求:假定总票数是100张        假设 有5个人排队卖票,同一时间只能有一个人买票        票卖出去之后,票数要减少 代码: /** * */ package com.niit.homework; /** * @author: Annie * @date:2016年6月16日 * @description:假定总票数是100张 假设 有5个人排队卖票,同一时间只能有一个人买票 票卖出去之后,票数要减少 */ public class TicketDemo implements Ru

后台代码之买票和查找核实航班的代码

//后台买票 public List<String[]> buy(Integer lid,String radio1) { List<String[]> result=new ArrayList<String[]>(); if(radio1.toString().equals("头等舱")) { String sql="SELECT b.`name`,a.linename,\r\n" + " a.startplace,a

【小白的java成长系列】——多线程初识(多人买票问题)

本来这节内容是要到后面来说的,因为最近在弄并发的问题,推荐一本书<java并发编程实战>,深入的讲解了多线程问题的.本人最近也刚好在看这本书,还不错的~ 多线程的相关概念,就不用说了的,自己可以去网上查找,有一大堆关于它的讲解~ 先来看看买票的程序: package me.javen.thread.one; public class TicketDemo { public static void main(String[] args) { // 使用Thread类的方式 // TicketTh