信封嵌套问题java代码 信封嵌套问题java代码怎么写

概率问题:(好回答追加!) 有n个信封(编号为1-n),n封信(编号为1-n),随机把一封信放入一个信封。求:

1.设Ai,i=1,2,...,n是第i封信放入第i个信封的事件,则A1+A2+...+An是至少有一封信放入对应的信封的事件

创新互联专业为企业提供永昌网站建设、永昌做网站、永昌网站设计、永昌网站制作等企业网站建设、网页设计与制作、永昌企业网站模板建站服务,十多年永昌做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

利用一般加法公式求概率 P(A1+A2+...+An)

则 1-P(A1+A2+...+An)即没有一封对的概率。

2.选出k封信,让他们放对信封,求出其概率为p;然后利用1的结论,计算出剩下n-k封信都没有放对信封的概率q,他们的乘积就是恰有k封信放对的概率。

ZMQ JAVA使用经验之 ZMQ简介怎么解决

ZMQ JAVA使用经验之 ZMQ简介怎么解决:

ZMQ被称为史上最快消息队列,它处于会话层之上,应用层之下,使用后台异步线程完成消息的接受和发送,完美的封装了Socket API,大大简化了编程人员的复杂度,被称为史上最强大的消息中间件。ZMQ是用C语言编写的,30s内完成消息的传输,能够兼容多个平台,多种语言,可以使用多种方式实现N对N的Socket连接。本文仅以JAVA版本的ZMQ API为例,介绍ZMQ。

ZMQ与传统的TCP Socket相比,具有以下优点:

1) ZMQ发送和接受的是具有固定长度的二进制对象,ZMQ的消息包最大254个字节,前6个字节是协议,然后是数据包。数据包由3个部分组成,第一个字节是包的长度,第二个字节是包的一些属性,最后是包的内容。如果超过255个字节(有一个字节表示包属性),则ZMQ会自动分包传输;而对于TCP Socket,是面向字节流的连接,编程人员需要处理数据块与数据块之间的边界问题,而ZMQ能够保证每次用户发送和接受的都是一个完整的数据块;

2) 传统的TCP Socket的连接是1对1的,可以认为“1个Socket=1个连接”,每一个线程独立的维护一个Socket。但是ZMQ摒弃了这种1对1的模式,ZMQ的Socket可以很轻松的实现1对N,N对1和N对N的连接模式,一个ZMQ的Socket可以自动的维护一组连接,用户无法操作这些连接,用户只能操作套接字,而不是连接本身,所以说ZMQ的世界里,连接是私有的。这里大家关心的一点是,一个Socket是如何识别来自多个Socket的连接的,这里以请求响应模式为例介绍ZMQ是如何实现一个Socket连接N个Socket的;

3)ZMQ使用异步后台线程处理接受和发送请求,这意味着发送完消息,不可以立即释放资源,消息什么时候发送用户是无法控制的,同时,ZMQ自动重连,这意味着用户可以以任意顺序加入到网络中,服务器也可以随时加入或者退出网络;

ZMQ之所以能够在无状态的网络中实现1对N的连接,关键在于信封的机制,信封里保存了应答目标的位置。ZMQ涉及到请求-响应模式的Socket一共有4种类型:

DEALER是一种负载均衡,它会将消息分发给已连接的节点,并使用公平队列的机制处理接受到的消息。

REQ发送消息时会在消息顶部插入一个空帧,接受时会将空帧移去。其实REQ是建立在DEALER之上的,但REQ只有当消息发送并接受到回应后才能继续运行。

ROUTER在收到消息时会在顶部添加一个信封,标记消息来源。发送时会通过该信封决定哪个节点可以获取到该条消息。

REP在收到消息时会将第一个空帧之前的所有信息保存起来,将原始信息传送给应用程序。在发送消息时,REP会用刚才保存的信息包裹应答消息。REP其实是建立在ROUTER之上的,但和REQ一样,必须完成接受和发送这两个动作后才能继续。

在了解了4种类型的Socket之后,我们就不难理解ZMQ的信封机制了。ZMQ信封机制的核心是Router Socket,它的工作原理如下:

从ROUTER中读取一条消息时,ZMQ会包上一层信封,上面注明了消息的来源。向ROUTER写入一条消息时(包含信封),ZMQ会将信封拆开,并将消息递送给相应的对象。当REQ Socket向ROUTER Socket发送一条请求后,REP会从ROUTER收到一条消息,消息格式如下:

第三帧是REP从应用程序收到的数据,第二帧是空帧,是REQ在发送ROUTER数据之前添加的,用来表示结束,第一帧即信封,是ROUTER添加的,主要用来记录消息来源;整个数据包处理过程如下:

对于REQ Socket,可以在创建Socket的时候,为该Sock指定标示符,此时的Socket称为持久Socket,没有指定标示符的我们称为瞬时Socket,ROUTER会自动为瞬时Socket生成一个标示符;

这样REP返回包含信封的数据给ROUTER,ROUTER就可以根据信封上的标示符将该消息发送到对应的REQ上;

ZMQ使用注意事项:

ZMQ是在发送端缓存消息的,可以通过阈值控制消息的溢出;

ZMQ不可以线程之间共享Socket,否则会报org.zeromq.ZMQException: Operation cannot be accomplished in current state错误。

ZMQ一个进程只允许有一个Context,new Context(int arg) arg表示后台线程的数量;

ZMQ的Socket类有一个Linger参数,可以通过SetLinger设置,主要用于表示该Socket关闭以后,未发送成功的消息是否还保存,如果设置为-1表示该消息将永久保存(除非宕机,ZMQ是不持久化消息的),如果为0表示所有未发送成功的消息在Socker关闭以后都将立即清除,如果是一个正数,则表示该消息在Socket关闭后多少毫秒内被删除;这个方法非常有用,尤其在控制发送失败时,是否重发消息。

算法小抄题目(按章节)

1.斐波那契数列: 509. 斐波那契数

2.凑零钱:  322. 零钱兑换

1.全排列: 46. 全排列

2.N皇后: 51. N 皇后

1.二叉树最小高度: 111. 二叉树的最小深度

2.打开密码锁: 752. 打开转盘锁

1.链表是否有环: 141. 环形链表

2.环的起始位置: 142. 环形链表 II

3.寻找无环单链表的中点:用于对链表进行归并排序

4. 剑指 Offer 22. 链表中倒数第k个节点

1.二分查找: 704. 二分查找

2.两数之和(数组升序): 167. 两数之和 II - 输入有序数组

3.反转数组

4.滑动窗口

1.基本的二分查找

2.寻找左侧边界和右侧边界的二分搜索: 34. 在排序数组中查找元素的第一个和最后一个位置

1.最小覆盖子串: 76. 最小覆盖子串

2.字符串排列: 567. 字符串的排列

3.找到所有字母的异位词: 438. 找到字符串中所有字母异位词

4.无重复字符的最长子串: 3. 无重复字符的最长子串

1.最长递增子序列: 300. 最长递增子序列

2.二维递增子序列:信封嵌套问题 354. 俄罗斯套娃信封问题

3.最大子数组: 53. 最大子序和

4.最长公共子序列: 1143. 最长公共子序列

5.编辑距离: 72. 编辑距离

6.最长回文子序列: 516. 最长回文子序列

7.最小插入次数构造回文串: 1312. 让字符串成为回文串的最少插入次数

8.正则表达式匹配: 10. 正则表达式匹配

9.高楼扔鸡蛋: 887. 鸡蛋掉落

10.戳气球: 312. 戳气球

11.0-1背包:

12.子集背包: 416. 分割等和子集

13.完全背包: 518. 零钱兑换 II

14.打家劫舍一: 198. 打家劫舍

15.打家劫舍二: 213. 打家劫舍 II

16.打家劫舍三: 337. 打家劫舍 III

17.目标和: 494. 目标和

1.手写LRU: 146. LRU 缓存机制

2.手写LFU: 460. LFU 缓存

3.判断二叉树是否相同: 100. 相同的树

4.判断二叉搜索时的合法性: 98. 验证二叉搜索树

5.在BST中查找一个数是否存在: 700. 二叉搜索树中的搜索

6.在BST中插入一个数: 701. 二叉搜索树中的插入操作

7.在BST删除一个数: 450. 删除二叉搜索树中的节点

8.完全二叉树的节点数: 222. 完全二叉树的节点个数

9.二叉树的序列化和反序列化: 297. 二叉树的序列化与反序列化

10.二叉树最近公共祖先: 236. 二叉树的最近公共祖先

11.下一个更大元素: 496. 下一个更大元素 I

12.更高的温度: 739. 每日温度

13.循环数组:原是数组翻倍,再接一个原数组

14.滑动窗口最大值: 239. 滑动窗口最大值

15.判断回文链表: 234. 回文链表

16.反转整个链表: 206. 反转链表

17.反转前N个节点:记录N=1时的前驱节点,翻转后,head.next = successor

18.反转m-n的节点: 92. 反转链表 II

19.K个一组翻转链表:#### 25. K 个一组翻转链表

1.求子集: 78. 子集

2.求组合: 77. 组合

3.求排列: 46. 全排列

4.解数独: 37. 解数独

5.括号生成: 22. 括号生成

6.滑动题: 773. 滑动谜题

7.2Sum系列问题:

① 1. 两数之和 map

② 167. 两数之和 II - 输入有序数组 双指针

③ 653. 两数之和 IV - 输入 BST 中序遍历保存到数组,或者直接利用HashSet。

8.三数之和: 15. 三数之和

9.四数之和: 18. 四数之和

10.计算器(栈+)

(栈+递归)

224. 基本计算器

227. 基本计算器 II

acm信封放错问题,提交后是wrong

错排:n封信放入n个信封,要求全部放错,共有多少种放法,记n个元素的错排总数为f(n)

假设有n封信,第一封信可放在(2-n)的任一个信封里,共n-1种放法,设第一封信放在了第k个信封里,若此时第k封信放在了第1个信封里,则只要将剩下的n-2错排,即f(n-2),若第k封信没有放在了第1个信封里,可将第1封信的位置看成是“第k个位置”,即将n-1封信错排,即为f(n-1)

由递推可得,f(n)=(n-1)*(f(n-1)+f(n-2))

HDU-2049-考新郎

基本的错排和排列组合的应用

#includestdio.h

#includestring.h

#includestdlib.h

__int64 f[25];

__int64 sol(int m,int n)  //排列组合公式

{

int i;

__int64 sum1,sum2;

sum1=sum2=1;

for(i=n;i=(m+1);i--)

sum1*=i;

for(i=1;i=(n-m);i++)

sum2*=i;

return sum1/sum2;

}

void init()

{

int i;

f[1]=0;

f[2]=1;

for(i=3;i=20;i++)  //错排

f[i]=(i-1)*(f[i-1]+f[i-2]);

}

int main()

{

int n,m,t;

__int64 ans;

init();

scanf("%d",t);

while(t--)

{

scanf("%d%d",n,m);

ans=sol(m,n)*f[m];

printf("%I64d\n",ans);

}

return 0;

}

由此可得你的题目的代码为:

#includestdio.h

#includestring.h

#includestdlib.h

__int64 f[25];

void init()

{

int i;

f[1]=0;

f[2]=1;

for(i=3;i=20;i++)  //错排

f[i]=(i-1)*(f[i-1]+f[i-2]);

}

int main()

{

int n;

__int64 ans;

init();

while(scanf("%d",n)!=EOF)

{

ans=f[n];

printf("%I64d\n",ans);

}

return 0;

}

网站标题:信封嵌套问题java代码 信封嵌套问题java代码怎么写
文章来源:https://www.cdcxhl.com/article28/ddscdjp.html

成都网站建设公司_创新互联,为您提供自适应网站用户体验定制开发网站设计手机网站建设品牌网站设计

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站建设网站维护公司