Rainshaw's Blog - 程序设计实习
type: channel
link: https://blog.gaoruixiao.com/category/programming_internship/
items: 程序设计实习——魔兽系列
items: 程序设计实习——STL1

程序设计实习——魔兽系列
type: item
date: 2019-04-11T21:28:00+08:00
description: 前言C++程设实习中魔兽世界分为了四个小任务实现, 博主今天终于码完了魔兽四, 从魔兽一开始增补代码, 最终的代码量竟然有1600行, 也懒得优化了, 这里记录一下各个版本.魔兽世界之一：备战总时间限制: 1000ms 内存限制: 65536kB 描述 魔兽世界的西面是红魔军的司令部，东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市。 红司令部，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 warriorsAC代码为#include <iostream> #include #include <vector> #include <cstring> #include <functional> using namespace std; int mytime, maxtime; unsigned int healthPointList[5]; ch…

程序设计实习——STL1
type: item
date: 2019-04-09T22:31:00+08:00
description: A:白给的list排序总时间限制: 1000ms 内存限制: 65536kB描述程序填空，产生指定输出#include <cstdio> #include <iostream> #include <algorithm> #include using namespace std; int main() { double a[] = {1.2,3.4,9.8,7.3,2.6}; list<double> lst(a,a+5); lst.sort( [](double a,double b){return a>b;} ); for(list<double>::iterator i = lst.begin(); i != lst.end(); ++i) cout << * i << "," ; return 0; }输入无输出9.8,7.3,3.4,2.6,1.2,样例输入无样例输出同输入来源Guo WeiB:按距离排序总时间限制: 1000ms 内存限制: 65536kB描述程序填空，输出指定结果#include <iostream> #include <cmath> #include <algorithm> #include <string> using namespace std; template <class T1,class T2> struct Closer { T1 n; T2 x; Closer(T1 nn, T2 xx){ //cout<<nn<<endl; n=nn;x=xx; } bool operator()(T1 &a, T1 &b){ //cout<<a<<" "<<b<<endl; if(x(n,a)==x(n,b)){ return a<b; } return x(n,a)<x(n,b); } }; int Distance1(int n1,int n2) { return abs(n1-n2); } int Distance2(const string & s1, const string & s2) { return abs((int)s1.length()- (int) s2.length()); } int a[10] = { 0,3,1,4,7,9,20,8,10,15}; string b[6] = {"American","Jack","To","Peking","abcdefghijklmnop","123456789"}; int main() { int n;string s; while( cin >> n >> s ) { sort(a,a+10,Closer<int ,int (*)(int ,int)> (n,Distance1)); for(int i = 0;i < 10; ++i) cout << a[i] << "," ; cout << endl; sort(b,b+6,Closer<string,int (*)(const string &,const string & )> (s,Distance2)); for(int i = 0;i < 6; ++i) cout << b[i] << "," ; cout << endl; } return 0; }输入多组数据，每组一行，是一个整数n和一个字符串s输出定义两个整数的距离为两个整数差的绝对值定义两个字符串的距离为两个字符串长度差的绝对值对每组数据：对数组a按和n的距离从小到大排序后输出。距离相同的，值小的排在前面。然后对数组b，按照和s的距离从小到大输出。距离相同的，字典序小的排在前面样例输入2 a123456 4 a12345样例输出1,3,0,4,7,8,9,10,15,20, American,Peking,123456789,Jack,To,abcdefghijklmnop, 4,3,1,7,0,8,9,10,15,20, Peking,American,Jack,123456789,To,abcdefghijklmnop,来源Guo WeiC:goodcopy总时间限制: 1000ms 内存限制: 65536kB描述编写GoodCopy类模板，使得程序按指定方式输出#include <iostream> using namespace std; template <class T> struct GoodCopy { void operator()(T* start, T* end, T* aim){ int num=end-start; T* mid=new T[num]; for(int i=0;start+i!=end;++i) mid[i]=start[i]; for(int i=0;i<…