c语言中什么是"容错处理"

c语言中什么是"容错处理",第1张

这个不是具体的技术,大概就是让程序在数据出错时不会崩坏,告诉用户数据出错了。比如在输入用户生日时,如果用户输入了13月32日,那么程序要通知用户“请输入正确的生日”,这个就是容错处理。如果不做这个处理的话,程序可能因为月份是13月而直接卡死 或者 真的把生日填成了13月。

比较熟练的玩家会在杀至中盘时对比狼人村民双方的局势优劣,进而做出适合局势的行为,甚至一开始就会根据给出的规则决定是否参与游戏。这些能够反映局势的参数就是我们本节所说的“容错”。

“容错”本是个计算机用语,指文件在存储或传输中由于故障或者干扰发生错误或丢失时,系统能够自动恢复文件的能力,即“容错能力”,简称“容错”。借鉴过来,意思也差不多,是指在己方阵营的决策发生错误时,仍然能保证阵营胜利的最大犯错基数。

容错是个很大的概念,从性质上分,可以分为直接容错与间接容错。直接容错,即传统意义上的“轮次”,凡是能够造成出局或避免本该出局的事件都属于直接容错的范畴;间接容错反应不在轮次上面,但同样能够影响以后犯错的可能或影响战局,如警长选举与不能造成角色出局的技能(如【预言】)使用。从角度上分,可以分为绝对容错和相对容错。绝对容错是指阵营在满足取胜的必要条件的前提下,所能犯的最大错数,通俗一点,就是说犯错数超过这个值,无论如何也赢不了;相对容错,即己方的直接容错与敌方的直接容错之差。如果敌方不唯一,可以分为将所有非己方阵营都视为敌对阵营从而计算出的全容错,以及只考虑主要敌对阵营忽略次要敌对阵营而计算出的偏容错。一般情况下,我们所讨论的容错都是村民阵营对狼人阵营的直接相对容错,表示方法为A/B,A为假设狼队选择刀特殊身份,B为狼队选择刀村民。因为在人数较多、实力较均衡的前提下,决定战局的主导因素正是这一项。

一、直接容错

直接容错主要包括投票、【杀人】、【毒药】、【救药】,守卫的【守护】在定义上讲属于直接容错,但由于其较前三项不稳定,所以计算时通常不考虑在内。但在一些适用于高手对决的规则中,常常也会考虑进去,从而造成规则上体现出负容错的局面。对于村民阵营而言,由于很难出现特殊身份或普通身份被投票出局的情况,所以犯错主要体现在票民以及女巫的药用错对象上,而狼队的主要错误体现在刀法的前后不一上。所以定义村民阵营票或毒一个村民、狼人阵营刀歪一刀为一个基数。

举一个简单的例子,假设有先知、女巫、5民、3狼组成的10人局,刀边规则,共有村民和狼人两个阵营。村民阵营的直接绝对容错为2,即当村民阵营票或毒超过2个村民之后,无论狼人如何出刀(不自刀的前提下),村民阵营都无法胜利。当然,能使得村民阵营误出2个村民还能赢的狼队也是十分不堪的。其实可以看出,绝对容错是在“比烂”,在玩家具备一定水平的前提下很难达到这个数字,而真正有意义的是相对容错。可以算出,这个规则下的容错为0/1.5。这意味着在狼人选择刀特路线时,村民阵营只要不比狼人阵营犯的错误基数多,或者狼人选择刀民路线时,村民阵营只要不比狼人阵营犯错基数超过1.5,就能保证胜利。如果假设狼人阵营选择刀特路线,每一刀都很准,村民阵营就要保证每一票、毒都要在狼人身上。而这两个数字的大小关系,即本例中的A<B也就保证了狼人的刀法优先顺序,特是在民之前的。结合之前我们提到的公设,此时狼人是以刀特为目标,会对确认谁是特殊身份更积极。

容错可以由公式计算得出:A=(Ks+M)-(W-P)-NB=[(T+M+G)-(W-P)-N]/2.其中Ks代表特殊身份的刀数,即女巫+先知+守卫+长老*2、M代表救药、W代表狼人数、P代表毒药、N代表即将进行的状态(白天=0,夜晚=1)、T代表村民数、G代表守卫。

二、间接容错

间接容错包括警长选举、【预言】以及由于一些导致敌方绝对容错和值的减小的策略。其中警长选举所造成的间接容错仅在非村民阵营所能投出的票数+警长票权>=村民阵营所能投出的票数且村民阵营无法通过技能扭转情况时考虑在内。如10人局,2狼、先知、女巫、3民、爱神、黑情侣,村民票数为5、非村民票数也为5,若警长在非村民,便是5V6,若当晚女巫出双药毒黑情侣,可以扭转为5V4,此时警长便可不予考虑,若女巫不出毒,则无法扭转,警长造成的间接容错便需要考虑。【预言】所造成的间接容错的价值主要体现在通过事实而非猜想进行判断,从而减小场上的自由度暨减少消耗直接容错的概率来提高胜率的,在此不细表。策略即指当一个阵营过度强大时,敌对阵营为了维护自己的胜率会在短时间内结成同盟,造成敌对阵营的直接容错=各阵营容错之和的极端情况。间接容错通常不能进行简单的量化,其作用在于可以改变直接容错的算法,如果一定要量化,那么它的值近似等于改变算法前后直接容错之差。

容错的计算从原理上讲不是难事,但时刻保持着容错意识,却不是每个人都能做到的。如果不能保证每时每刻都在计算容错,至少要在开局与相对容错数目发生变化的时候计算,从而根据其数值指定相应的策略。

如果你对本文表示赞同,并有兴趣与我们一同游戏,请关注我们的论坛:

Xclub版杀论坛

展开阅读全文

如果你使用cin。他会自动帮你进行筛选。如果你输入一个字母,就会产生不可预料的后果。一般的做法是,在使用cin前,将data[i]进行初始化,比如说-1,然后检测,运行完cin之后,data[i]是否有所改变。范例程序如下。

#include <stdio.h>

#include <iostream>

using namespace std

void main()

{

int i = -1

cin >>i

while (i == -1)

{

cout <<"Wrong!" <<endl

cin.clear() // 清除cin的标志位,在发生输入错误时,它会被改变

cin.sync() // 将你已经输入到cin中的数据清除掉

cin >>i

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11423190.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存