华科CPP慕课SPOC第七章 编程题2

请完整程序中的NPC类。使得程序的运行结果和输出样例完全相同(25分)

题目内容:

请完整程序中的NPC类。使得程序的运行结果和输出样例完全相同

#include <iostream>

using namespace std;

double tax=0; //系统收到的交易税

class NPC{     

       int role;//角色类型,1:农夫,2:矿工

       char skill;//技能,'c':种植,是农夫的技能,'d':挖掘,是矿工的技能

       double gold;//金币数量

       double corn;//谷物数量

public:

       NPC(int _r);//构造函数,新对象的角色值为_r,技能和角色配套,金币和谷物数量都为0

       void work();//工作。角色为农夫,谷物数量增加1000;角色为矿工,金币数量增加5

       void trade(NPC &p);//交易。交易双方必须为不同类型角色,且农夫的谷物不少于200,矿工的金币不少于4.5

        //交易后,农夫的谷物减少200,金币增加4,矿工的金币减少4,谷物增加200。双方各自缴纳0.5个金币的税

       double get_corn();//返回corn的值

       double get_gold();//返回gold的值

       char get_skill();//返回技能

};

int main(){

       NPC NP1(1),NP2(2);

       for (int i=0;i<3;i++) NP1.work();

       NP2.work();

       cout<<"NP1.skill:"<<NP1.get_skill()<<' '<<"NP1.corn:"<<NP1.get_corn()<<' '

       <<"NP1.gold:"<<NP1.get_gold()<<endl;

       cout<<"NP2.skill:"<<NP2.get_skill()<<' '<<"NP2.corn:"<<NP2.get_corn()<<' '

       <<"NP2.gold:"<<NP2.get_gold()<<endl;

       for (int i=0;i<2;i++){   

              cout<<"trade_"<<i+1<<"----------------------------"<<endl;

              NP1.trade(NP2);

              cout<<"NP1.skill:"<<NP1.get_skill()<<' '<<"NP1.corn:"<<NP1.get_corn()

                     <<' '<<"NP1.gold:"<<NP1.get_gold()<<endl;

              cout<<"NP2.skill:"<<NP2.get_skill()<<' '<<"NP2.corn:"<<NP2.get_corn()

                     <<' '<<"NP2.gold:"<<NP2.get_gold()<<endl;

              cout<<"tax:"<<tax<<endl;

      }

      return 0;

}

输入格式:

输出格式:

输入样例:

输出样例:

NP1.skill:c NP1.corn:3000 NP1.gold:0

NP2.skill:d NP2.corn:0 NP2.gold:5

trade_1----------------------------

NP1.skill:c NP1.corn:2800 NP1.gold:3.5

NP2.skill:d NP2.corn:200 NP2.gold:0.5

tax:1

trade_2----------------------------

NP1.skill:c NP1.corn:2800 NP1.gold:3.5

NP2.skill:d NP2.corn:200 NP2.gold:0.5

tax:1

代码如下:

#include <iostream>

using namespace std;

double tax=0; //系统收到的交易税

class NPC{     

       int role;//角色类型,1:农夫,2:矿工

       char skill;//技能,'c':种植,是农夫的技能,'d':挖掘,是矿工的技能

       double gold;//金币数量

       double corn;//谷物数量

public:

       NPC(int _r);//构造函数,新对象的角色值为_r,技能和角色配套,金币和谷物数量都为0

       void work();//工作。角色为农夫,谷物数量增加1000;角色为矿工,金币数量增加5

       void trade(NPC &p);//交易。交易双方必须为不同类型角色,且农夫的谷物不少于200,矿工的金币不少于4.5

        //交易后,农夫的谷物减少200,金币增加4,矿工的金币减少4,谷物增加200。双方各自缴纳0.5个金币的税

       double get_corn();//返回corn的值

       double get_gold();//返回gold的值

       char get_skill();//返回技能

};

NPC::NPC(int _r)
{
	role=_r;
	corn=gold=0;
	if(role==1)
	{
		skill='c';
	}
	else
	skill='d';
}

void NPC::work()
{
	if(role==1)
	{
		corn+=1000;
	}
	else gold+=5;
}

void NPC::trade(NPC &p)
{
	
	if(role!=p.role)
	{
		if(gold>=4.5&&p.corn>=200||corn>=200&&p.gold>=4.5)
		{
			tax++; 
			if(role==1)
			{
				corn-=200;
				p.corn+=200;
				gold+=3.5;
				p.gold-=4.5;
			}
			else
			{
				corn+=200;
				p.corn-=200;
				gold-=4.5;
				p.gold+=3.5;
			}
		}
	}
}

double NPC::get_corn()
{
	return corn;
}

double NPC::get_gold()
{
	return gold;
}

char NPC::get_skill()
{
	return skill;
}

int main(){

       NPC NP1(1),NP2(2);

       for (int i=0;i<3;i++) NP1.work();

       NP2.work();

       cout<<"NP1.skill:"<<NP1.get_skill()<<' '<<"NP1.corn:"<<NP1.get_corn()<<' '

       <<"NP1.gold:"<<NP1.get_gold()<<endl;

       cout<<"NP2.skill:"<<NP2.get_skill()<<' '<<"NP2.corn:"<<NP2.get_corn()<<' '

       <<"NP2.gold:"<<NP2.get_gold()<<endl;

       for (int i=0;i<2;i++){   

              cout<<"trade_"<<i+1<<"----------------------------"<<endl;

              NP1.trade(NP2);

              cout<<"NP1.skill:"<<NP1.get_skill()<<' '<<"NP1.corn:"<<NP1.get_corn()

                     <<' '<<"NP1.gold:"<<NP1.get_gold()<<endl;

              cout<<"NP2.skill:"<<NP2.get_skill()<<' '<<"NP2.corn:"<<NP2.get_corn()

                     <<' '<<"NP2.gold:"<<NP2.get_gold()<<endl;

              cout<<"tax:"<<tax<<endl;

      }

      return 0;

}

 

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季风13

谢谢认可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值