这道题,我想了很久,但是因为没答案,所以没办法确定是不是正确的,假如你们来做这个题,你们会怎么设计呢?
题完整如下:(计帐)假设你是一个金融家,你在每年的一月,四月,和九月购买X公司100股股票,每年六月和十一月卖掉100股。这些月份中每一股的价格是:
Jan Apr Jun Sep Nov
$10 $30 $20 $50 $30
确定你的资金收益或损失总量。要求使用队列(先进先出)。你在本年结束时拥有的100股不要参与计算。
我的设计是这样的:
const int maxqueue = 12;
typedef int Queue_entry;
enum Error_code { success,overflow,underflow };
class Queue
{
public:
Queue();
bool empty() const;
virtual Error_code append(const Queue_entry &x);//添加一个元素的引用
virtual Error_code serve();//删除第一个元素
Error_code retrieve(Queue_entry &x) const;//对第一个元素进行引用(x)
protected:
int count;
int front,rear;
Queue_entry entry[maxqueue];
};
........
#include "queue.h"
#include <iostream>
using namespace std;
int main()
{
Queue q;
q.append(10);//添加一月的股价
q.append(30);//添加四月的股价
int i;//为了对 队列第一个元素的引用定义了次变量
q.retrieve(i);//引用一月的股价
i = (20 -i)*100;//将卖掉的股价减去购买的股价,即为收益
q.serve();//删除第一个元素
q.append(50);//添加九月的股价
int j;//为了对 队列第一个元素的引用定义了次变量
q.retrieve(j);//引用一月的股价
q.serve();//删除第一个元素
j = (30-j)*100;//同上
int sum = i + j;//两次收益的和,即为收益总量
cout<<sum<<endl;
return 0;
}
我感觉这个不大合理的原因是:如果每一月都有卖掉,那我就要定义十二个变量,如上面的(i,j.....),这样好象麻烦?
不知道大家有没有更好的设计方法?
[此贴子已经被作者于2006-6-8 18:31:32编辑过]