一不小心踏入PKU程序设计专项课程,没先听课就交钱加入。这门课,目的是培养程序员,从0基础,到程序设计员的培养,课程顺序是C语言-算法-数据结构,实际拆分为6+1门(毕业项目),理念不可谓不好。但是,效果了了。最大的问题,就是这门专项课程,很大部分都是学生自学,课堂互动性几乎为0,没有别的MOOC课程的答疑讨论,只有一些民间自行组织的QQ群。程序设计这东西,零基础入门还是有点勉强。天才是有,更多靠的是勤奋积累。君不见为了进谷歌等大型IT企业,多少人硬是把各种算法、数据结构背了个遍。
今天要说的是PKU这门课中的C++部分的大作业,魔兽世界的第一部分,据说其第三部分终结版非常之变态,代码2k行。这个第一部分,初看起来就觉得很复杂,下面给出题目。

描述

魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市。

红司令部,City 1,City 2,……,City n,蓝司令部

两军的司令部都会制造武士。武士共有dragon、ninja、iceman、lion、wolf
五种。每种武士都有编号、生命值、攻击力这三种属性。

双方的武士编号都是从1开始计算。红方制造出来的第n个武士,编号就是n。同样,蓝方制造出来的第n个武士,编号也是n。

武士在刚降生的时候有一个生命值。

在每个整点,双方的司令部中各有一个武士降生。

红方司令部按照iceman、lion、wolf、ninja、dragon的顺序循环制造武士。

蓝方司令部按照lion、dragon、ninja、iceman、wolf的顺序循环制造武士。

制造武士需要生命元。

制造一个初始生命值为m的武士,司令部中的生命元就要减少m个。

如果司令部中的生命元不足以制造某个按顺序应该制造的武士,那么司令部就试图制造下一个。如果所有武士都不能制造了,则司令部停止制造武士。

给定一个时间,和双方司令部的初始生命元数目,要求你将从0点0分开始到双方司令部停止制造武士为止的所有事件按顺序输出。

一共有两种事件,其对应的输出样例如下:

1) 武士降生

输出样例: 004 blue lion 5 born with strength 5,2 lion in red headquarter

表示在4点整,编号为5的蓝魔lion武士降生,它降生时生命值为5,降生后蓝魔司令部里共有2个lion武士。(为简单起见,不考虑单词的复数形式)注意,每制造出一个新的武士,都要输出此时司令部里共有多少个该种武士。

2) 司令部停止制造武士

输出样例: 010 red headquarter stops making warriors

表示在10点整,红方司令部停止制造武士

输出事件时:

首先按时间顺序输出;

同一时间发生的事件,先输出红司令部的,再输出蓝司令部的。

输入

第一行是一个整数,代表测试数据组数。

每组测试数据共两行。

第一行:一个整数M。其含义为, 每个司令部一开始都有M个生命元( 1 <= M <= 10000)。

第二行:五个整数,依次是 dragon 、ninja、iceman、lion、wolf 的初始生命值。它们都大于0小于等于10000。

输出

对每组测试数据,要求输出从0时0分开始,到双方司令部都停止制造武士为止的所有事件。

对每组测试数据,首先输出”Case:n” n是测试数据的编号,从1开始 。

接下来按恰当的顺序和格式输出所有事件。每个事件都以事件发生的时间开头,时间以小时为单位,有三位。

样例输入

1 20 3 4 5 6 7 样例输出

Case:1
000 red iceman 1 born with strength 5,1 iceman in red headquarter
000 blue lion 1 born with strength 6,1 lion in blue headquarter
001 red lion 2 born with strength 6,1 lion in red headquarter
001 blue dragon 2 born with strength 3,1 dragon in blue headquarter
002 red wolf 3 born with strength 7,1 wolf in red headquarter
002 blue ninja 3 born with strength 4,1 ninja in blue headquarter
003 red headquarter stops making warriors
003 blue iceman 4 born with strength 5,1 iceman in blue headquarter
004 blue headquarter stops making warriors

光看到这一大片,很多人就不想看了。而同一部分作业,上一题是这样的

下面程序的输出是:
10
请补足Sample类的成员函数。不能增加成员变量。

#include <iostream>
using namespace std;
class Sample{
public:int v;Sample(int n):v(n) { }
// 在此处补充你的代码
};
int main() {Sample a(5);Sample b = a;cout << b.v;return 0;
}

这两题根本不是一个量级的,却放在了一起。说是这样,但是不做这一题还过不了,过不了钱就白交了。好吧。c++初学,类还掌握的皮毛,用最原始结构程序方法看能否解决。从输出入手,虽然程序的描述很复杂,但是输出挺简单的。主要有几点:

  • 第一点是输入的变量,这个很简单,其中有一点注意是要求要输入n组cases,之后要把所有用到的变量清零。
  • 第二点是有一个“时钟”,直接每次加1即可
  • 第三点是部队的颜色区别:红色、蓝色;5种战士;战士的编号,计数到生产结束为止;战士的数量。
  • 第四点比较坑爹,就是战士的“强度”怎么理解,后来看仔细检查发现所谓强度就等于战士初始的生命值。并且这个生命值输入的顺序,很红队,蓝队里的顺序三者完全不同
  • 第五点是循环判断,就是说如果当前生产不了,就顺延一位,如果到了队尾还得从头枚举,如果都不行,就停止生产。这里这个终止条件挺绕的,我还没总结出比较简洁完善的写法。

类是应该学好的,因为使用类结构的好处就是,程序方便修改和扩充。但是理解上还有编写上比较困难。结构化程序的好处是,小规模的程序很好理解和编写,缺点就是不好修改很扩充。下面是我写的魔兽备战结构化程序。

#include <iostream>
#include <iomanip>
using namespace std;
int count_red[5]={0};        /*实际每种生产的战士数量*/
int count_blu[5]={0};int main()
{int C=0;       /*cases*/int M[2]={0};       /*生命元*/int HP[5]={0}; /*战士初始生命*/int clock=0;   /*时钟*/char color[2][5]={"red","blue"};               /*军队颜色*/char soldier_red[5][8]={/*红队战士种类*/"iceman","lion","wolf","ninja","dragon"};int HP_red[5]={0};       /*真正的红队初始生命*/char soldier_blu[5][8]={/*蓝队战士种类*/"lion","dragon","ninja","iceman","wolf"};int HP_blu[5]={0};      /*真正的蓝队初始生命*//*输入*/cin>>C;for(int j=0;j<C;j++){cin>>M[0];M[1]=M[0];           /*2队生命元*/for(int i=0;i<5;i++){cin>>HP[i];          /* dragon 、ninja、iceman、lion、wolf 的初始生命值*/}/*分配初始生命*//*红队*/HP_red[0]=HP[2];HP_red[1]=HP[3];HP_red[2]=HP[4];HP_red[3]=HP[1];HP_red[4]=HP[0];/*蓝队*/HP_blu[0]=HP[3];HP_blu[1]=HP[0];HP_blu[2]=HP[1];HP_blu[3]=HP[2];HP_blu[4]=HP[4];/*begin红方司令部按照iceman、lion、wolf、ninja、dragon的顺序循环制造武士。蓝方司令部按照lion、dragon、ninja、iceman、wolf的顺序循环制造武士。*/int k=0;int pos1=0;       /*红战士定位*/int pos2=0;       /*蓝战士定位*/int flag_r=0;                        /*红队停止生产标志*/int flag_b=0;                        /*蓝队停止生产标志*/int loop_r=0;int loop_b=0;                         /*循环计数*/cout<<"Case:"<<j+1<<endl;while(1){if(M[0]==0&&flag_r==0){cout<<setw(3)<<setfill('0')<<clock<<" ";cout<<"red headquarter stops making warriors"<<endl;flag_r=1;}if(M[0]>=0&&flag_r==0){if(pos1==5) pos1=0;                       /*按顺序回头生产*/M[0]=M[0]-HP_red[pos1];count_red[pos1]=count_red[pos1]+1;}loop_b=0;loop_r=0;while(M[0]<0&&flag_r==0){M[0]=M[0]+HP_red[pos1];pos1++;if(pos1==5) pos1=0;loop_r++;                                   /*试图制造下一个*/if(loop_r==5){cout<<setw(3)<<setfill('0')<<clock<<" ";cout<<"red headquarter stops making warriors"<<endl;flag_r=1;break;}M[0]=M[0]-HP_red[pos1];if(M[0]>=0&&flag_r==0)count_red[pos1]=count_red[pos1]+1;}if(M[0]>=0&&flag_r==0){cout<<setw(3)<<setfill('0')<<clock<<" ";cout<<color[k]<<" "<<soldier_red[pos1]<<" "<<clock+1<<" "<<"born with strength "<<HP_red[pos1]<<","<<count_red[pos1]<<" "<<soldier_red[pos1]<<" in "<<color[k]<<" headquarter"<<endl;pos1++;}k++;if(M[1]==0&&flag_b==0){cout<<setw(3)<<setfill('0')<<clock<<" ";cout<<"blue headquarter stops making warriors"<<endl;break;}if(M[1]>=0&&flag_b==0){if(pos2==5) pos2=0;                       /*按顺序回头生产*/M[1]=M[1]-HP_blu[pos2];count_blu[pos2]=count_blu[pos2]+1;}while(M[1]<0&&flag_b==0){M[1]=M[1]+HP_blu[pos2];pos2++;if(pos2==5) pos2=0;loop_b++;if(loop_b==5)   {cout<<setw(3)<<setfill('0')<<clock<<" ";cout<<"blue headquarter stops making warriors"<<endl;      /*如果无可制造,退出*/flag_b=1;break;}M[1]=M[1]-HP_blu[pos2];if(M[1]>=0&&flag_b==0)count_blu[pos2]=count_blu[pos2]+1;}if(M[1]>=0&&flag_b==0){cout<<setw(3)<<setfill('0')<<clock<<" ";cout<<color[k]<<" "<<soldier_blu[pos2]<<" "<<clock+1<<" "<<"born with strength "<<HP_blu[pos2]<<","<<count_blu[pos2]<<" "<<soldier_blu[pos2]<<" in "<<color[k]<<" headquarter"<<endl;pos2++;}clock++;k=0;if(flag_b==1&&flag_r==1)    break;}clock=0;for(int i=0;i<5;i++){count_red[i]=0;        /*清零*/count_blu[i]=0;}}return 0;
}

PKU MOOC作业魔兽世界之一:备战的结构化程序相关推荐

  1. 计算机网络原理和因特网华文慕课mooc作业答案

    计算机网络原理和因特网华文慕课mooc作业答案 1.网络概述 1.1 网络定义及分类 1.2 网络核心技术 1.网络概述 1.1 网络定义及分类 1.2 网络核心技术

  2. 魔兽世界 - PKU[课程作业]程序设计与算法(三)C++面向对象程序设计/coursera C++程序设计_World of warcraft Project

    感觉写得挺差:代码纯原创,没有半点参考: 以后若有空打算看看老师的代码,再来修改此文,先多花点时间再别的上面 建议: 1. 耐心点,仔细理解题意 2. 做到后面,前面若有设计得不好的地方,别犹豫,赶快 ...

  3. Openjudge上mooc组题目:魔兽世界:备战

    新人第一次写博客,此贴纪念意义大于实用性~ 这些代码是我花了一天多时间写的,本人水平属实拉跨,求各位大神轻喷. 我个人觉得我代码里的核心就是就是red和blue里的creat的方法,我个人偷偷的利用了 ...

  4. mooc 魔兽世界1 备战 的代码(可能输出要求和题意不符)

    这道题考察类的应用,我试了试那些测试数据,输出应该都是对的,不知道为什么最后总是wrong answer. 有可能是因为我是输入一组之后立刻输出一组?而题意是输入全部数据后一并输出吗? 如果那个样子的 ...

  5. mooc作业怎么上传附件_交作业的一二三

    划重点来啦! 敲黑板--敲--三--下! 第四期思维导图慕课 关键时间点: 发布新课:             周一14:00 作业提交截止时间:  周六23:30 互评时间:周六23:30-周一23 ...

  6. mooc作业怎么上传附件_中国大学MOOC最新考试系统(老师视角)增加学生作弊成本...

    大家好,你们的歌尔又来啦 上次有朋友们反馈,能不能看一下中国大学mooc的后台呢 歌尔搜集了好久给你们找来啦! 教师使用手册 2020年度春季学期已经临近期末了-- 各位同学们,你们最关心的是什么? ...

  7. [土狗之路]Coursera 北京大学C++ 魔兽世界:备战

    这道题目中间因为学校正课耽误了很久,结果时间到了 coursera 把我的课都给锁了,哎,申请了助学金,慢慢弄吧,之前心态不好,确实错在了细节,现在debug以及代码重构了,重新把代码po上来,然后开 ...

  8. 魔兽世界之一:备战(模拟)

    原题链接 最近几天练练模拟吧. A:魔兽世界之一:备战 总时间限制:  1000ms 内存限制:  65536kB 描述 魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部.两个司令部之间是依次排列 ...

  9. 数据结构与算法(Python)【PKU MOOC】

    数据结构与算法(Python) 一. Python数据类型的性能 1.list 列表 列表list所包含的方法 #1 添加: list.append(a_new_element) #在列表末尾添加新的 ...

最新文章

  1. 【FFmpeg】FFmpeg 帮助文档使用
  2. ACM训练赛--递推专题
  3. 利用反射实现对象调用方法
  4. shutil python_shutil模块
  5. 和你谈谈数据分析报告
  6. 实验讲解OSPF网络类型
  7. 如何做一个懂产品的程序员?
  8. linux cp 强制yes,linux cp实现强制覆盖
  9. supermap iserver java 6r许可_SuperMap iserver Java 6R 在 linux 上安装和配置 | 学步园
  10. Oracle 11g ora 15018,oracle 11gR2 RAC root.sh 错误 ORA-15072 ORA-15018
  11. 树莓派利用PuTTY进行远程登录
  12. linux主机添加discuz伪静态规则,Discuz! X2.5论坛win主机与linux主机伪静态设置方法...
  13. 用php的for循环画椭圆,如何快速简单的使用css3画出各种各样的椭圆
  14. Ethereum Casper 101
  15. Android 程序员计算器 开发记录-Git版本控制初步接触
  16. 抓包获取百度音乐API
  17. 2021年社招字节跳动测试开发工程师面试题
  18. 智慧工地农民工实名制管理系统
  19. adb 切换默认桌面,OPPO默认桌面替换教程
  20. 大芒果服务器外网登录时一直显示正在登录,mangos-mangos

热门文章

  1. 网维8300去广告图片
  2. 关于leetcode刷题详细介绍
  3. java ee李兴华_李兴华Java EE入门视频教程(魔乐科技解密版)
  4. 小白看物联网论文——EchoTag: Accurate Infrastructure-Free Indoor Location Tagging with Smartphones
  5. 2021年广东省工程技术研究中心申报指南
  6. 基于JAVA网页小游戏交流论坛计算机毕业设计源码+数据库+lw文档+系统+部署
  7. WALLPAPER-程序员壁纸
  8. 超市智能商品推荐系统设计
  9. 蓝桥杯第一次校内模拟赛java题解
  10. Android Studio与夜神模拟器链接