以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式中,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势”,类内部以0(石头)、1(剪刀)、2(布)来表示。Hand类的实例只会产生3个。以下是C++语言实现,能够正确编译通过。
private:
int handvalue;
static Hand *hand0;
static Hand *hand1;
static Hand *hand2;(1) ;
H.and(int handvalue){
this->handvalue = handvalue;
}
public:(2) Hand* getHand(int handvalue){
/*省略具体实现*/
}
};
H.and *Hand::hand0 = new Hand(0);
H.and *Hand::hand1 = new Hand(1);
H.and *Hand::hand2 = new Hand(2);
class Strategy{
public:(3) Hand* nextHand() = 0;
};
class WinningStrategy : public Strategy{
private:
bool won;
H.and *prevHand;
public:
winningStrategy(){
won = false;
}
H.and* nextHand(){
if(!won){
prevHand = Hand::getHand(rand()%3);
}
return prevHand;
}
};
class probstrategy : public Strategy{
public:
H.and* nextHand(){
int handvalue = 0;
/*省略具体实现*/
return Hand::getHand(handvalue);
}
};
class Player{
private:
string name;
Strategy* strategy;
public:
Player(string name, (4) strategy){
this->name = name;
this->strategy = strategy;
}
H.and *nextHand()(//向战略请示手势
return (5) ;
}
};
[试题]阅读以下函数说明和C代码,回答问题[说明]任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式种,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势”
[主观题]阅读以下说明和Java代码,回答问题[说明]任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式种,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手
[主观题]阅读下列函数说明和C++代码,回答问题[说明]对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器Iterator实现。图5-1显示了各个类间的关系。以下是C++语言实现,能够正确编译通过。[图5-1][C++代码]template (1) >class Iterator{
[主观题]阅读下列函数说明、图和C代码,回答问题[说明]在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都要画出与单词列表所对应的单词查找树。程序构造一棵二叉排序树,每个节点存储一个单词,按字典序列,较小的在左子树,较大的在右子树。函数中使用的预定义符号如下:typedef struct TreeNode{/*二叉排序树节点*/char *word;struct TreeNode *left, *right;}BNODE;[函数]int getWord(FI
[试题]阅读下列函数说明、图和C代码,回答问题[说明]假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:m=a[k]×10k-2+a[k-1]×10k-3+…+a[3]×10+a[2]其中a[1]保存该长整数的位数,a[0]保存该长整数的符号:0表示正数、1表示负数。运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小的,以避免出现不够减情况。注意,不考虑溢出情况,即数组足够大。[函数]int cmp(int *LA, int
[试题]阅读下列程序说明和C代码,回答问题1~2。[说明]本程序用古典的Eratosthenes的筛法求从2起到指定范围内的素数。如果要找出2至10中的素数,开始时筛中有2到10的数,然后取走筛中的最小的数2,宜布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数3、5、7、9:重复上述步骤,再取走最小数3,宣布它为素数,井取走3的倍数,于是留下5、7。反复重复上述步骤,直至筛中为空时,工作结束,求得2至 10中的全部素数。程序中用数组sieve表示筛子,数组元素sieve[i]的值为1
[主观题]阅读以下应用说明、图和C++代码,根据要求回答问题1至问题3。[说明]已知以下C++程序运行时的输出结果如下。1:11:11:1[C++程序]01 include <iostream>02 using namespace std;03 class Stock{04 protect:05 (1) { };06 Stock(int n, int pr=1) {07 shares = n; share_val=pr;08 };09 void ~Stock() { };10 public:11 //成员
[主观题]阅读以下技术说明和程序代码,根据要求回答问题。[说明]某公司用ASP+SQL Server开发的电子商务网站系统,提供了商品查询、网上购物车、订单管理、后台商品管理和支付等功能。图6~11是用ASP实现的电子商务网站的主页。系统的数据库名为 shangwu,所在服务器IP地址为211.54.32.21,其中,user表用于存放注册用户名和密码,结构如表 6-19所示。设计该电子商务网站时,某页面框架代码如下。该网页代码中定义了(1)个框架。
[案例分析题] 阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。说明:堆数据结构定义如下。对于n个元素的关键字序列(a1,a2,...,an),当且仅当满足下列关系时称其为堆:在一个堆中,若堆顶元素为最大元素,则称为大顶堆;若堆顶元素为最小元素,则称为小顶堆。堆常用完全二叉树表示,图8.11是一个大顶堆的例子。堆数据结构常用于优先队列中,以维护由一组元素构成的集合。对应于两类堆结构,优先队列也有最大优先队列和最小优先队列,其中最大优先队列采用大顶堆,最小优先队列采用小项堆。以下考虑最
[试题]阅读以下应用说明、图和Java代码,根据要求回答问题1至问题5。(说明)Stack类是java. ntil包中专门用来实现栈的工具类。以下Java程序是一个不使用库函数而实现字符串反转的程序。例如,输入:123456,则输出:654321:输入:asdfeg,则输出:gefdsa。(Java程序)import java.applet.Applet;import java.awt.*;import java.awt.event.*;import java.util.*;public class Us