单项选择题

[说明]
任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。
以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式种,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势”,类内部以0(石头)、1(剪刀)、2(布)来表示。Hand类的实例只会产生3个。
以下是C语言实现,省略了不相关属性及方法,方法实现体亦有所省略,能够正确编译通过。
[C代码]
typedef (1) (*funl)();
enum HandValueHANDVALUE_GUU=0, HANDVALUE_CHO=1, HANDVALUE_PAA=2;
//手势可取值,依次为“石头”、“剪刀”、“布”
//其大小顺序是循环相克的,即:石头赢剪刀,剪刀赢布,布赢石头
bool won;
struct Hand *WSprevHand;
struct Hand//手势
enum HandValue handvalue;
hand[3]=HANDVALUE_GUU, HANDVALUE_CHO, HANDVALUE_PAA;
int fight(struct Hand *h1, struct Hand *h2)
//比较h1和h2。h1代表的手势较大时返回1,h1较小时返回-1,相等时返回0
//
if(h1->handvalue == h2->handvalue)
return 0;
else if((h1->handvalue+1)% (2) == h2>handvalue)
return 1;
else
return -1;

struct Hand* getHand(int handvalue)
//依据手势代表的值取得手势,若handvalue不合法,返回NULL
switch(handvalue)
case 0:
return &hand[0];
break;
case 1:
return &hand[1];
bteak;
case 2;
return &hand[2];
break;
return (3) ;
struct Strategy//策略
funl nextHand;//下一个手势
;
struct Hand* WSnextHand()
if(!won)
PSprevHand = getHand(rand()%3);
return PSprevHand;
struct Player
char name[20];
(4) strategy;//策略
int wincount;
int losecount;
int gamecount;
;
void main()
Strategy WS;
WS.nextHand = WSnextHand;
WSpreVHand = NULL;
struct Player WSplayer;
(5)(WSplayer.name,"ww");
WSplayer.wincount = 0;
WSplayer.losecount = 0;
WSplayer.gamecount = 0;
WSplayer.strategy = &WS;

热门 试题

问答题
问答题
[说明] 在数据链路层扩展局域网时使用网桥。网桥工作在数据链路层,它根据MAC帧的目的地址对收到的帧进行转发。网桥具有过滤帧的功能:当网桥收到一个帧时,并不是向所有的端口转发此帧,而是先检查此帧的目的MAC地址,然后确认将该帧转发到哪个端口。 最简单的网桥有两个端口(即接口)。网桥的每个端口与一个网段相连。每当收到一个帧时,通过查找转发表将收到的帧转发。 当一个网桥刚刚连接到局域网上时,其转发表是空的,此时若收到一个帧,按照以下算法处理和建立自己的转发表: (1)从端口x收到的无差错的帧(如有差错即丢弃),在转发表中查找目的站MAC地址; (2)如有,则查找出到此MAC地址应走的端口d,然后进行(3),否则转到(5); (3)如到这个MAC地址去的端口d=x,则丢弃此帧(因为这表示不需要经网桥进行转发),否则从端口d转发此帧; (4)转到(6); (5)向网桥除x以外的所有端口转发此帧(这样做可以保证找到目的站); (6)如源站不在转发表中,则将源站MAC地址加入转发表,登记该帧进入网桥的端口号,设置计时器,然后转到(8),如源站在转发表中,则执行(7); (7)更新计时器; (8)等待新的数据帧,转到(1)。 这时,网桥就在转发表中登记以下三个信息:站地址——登记收到帧的源MAC地址、端口——登记收到的帧进入该网桥的端口号、时间——登记收到的帧进入该网桥的时间。 现有五个工作站分别连接在三个局域网上,并且用两个网桥连接起来,如图3-1。每一个网桥的两个端口号都标明在图上。在一开始,两个网桥中的转发表都是空的。以后有以下各站向其他的站发送了数据帧,即H1发送给H5,H3发送给H2,H4发送给H3,H2发送给H1。 [图3-1]