平面设计周记100篇某网站seo策划方案
AdvancedInheritance
描述
不同的动物既有共性也有个性。鸟类会飞,鱼会游泳。请设计类的层次结构进行表示,并通过以下测试
int main()
{Animal *animal;string type, color;bool Osteichthyes, daytime;cin >> type >> color >> Osteichthyes;Fish fish(type, color, Osteichthyes);fish.Print();animal = &fish;animal->Print();cin >> type >> color >> daytime;Bird bird(type, color, daytime);bird.Print();animal = &bird;animal->Print();return 0;
}
输入
鱼类型 鱼的颜色 是否硬骨鸟类型 鸟的颜色 是否白天活动
输出
见样例,冒号和逗号后有一个空格
输入样例 1
chub white 1 swallow black 1
输出样例 1
type: chub, color: white, Osteichthyes: 1 type: chub, color: white, Osteichthyes: 1 type: swallow, color: black, daytime: 1 type: swallow, color: black, daytime: 1
#include<iostream>
#include<string>
using namespace std;
class Animal
{
public:string type, color;bool yes;virtual void Print() {}
};class Fish :public Animal
{
public:int yes;Fish(string t, string c, bool y){type = t;color = c;yes = y;}virtual void Print(){cout << "type: " << type << ", color: " << color << ", Osteichthyes: " << yes << endl;}
};class Bird :public Animal
{
public:int yes;Bird(string t, string c, bool y){type = t;color = c;yes = y;}virtual void Print(){cout << "type: " << type << ", color: " << color << ", daytime: " << yes << endl;}
};
int main()
{Animal* animal;string type, color;bool Osteichthyes, daytime;cin >> type >> color >> Osteichthyes;Fish fish(type, color, Osteichthyes);fish.Print();animal = &fish;animal->Print();cin >> type >> color >> daytime;Bird bird(type, color, daytime);bird.Print();animal = &bird;animal->Print();return 0;
}
有理数类
描述
设计一个有理数类Rational,要求对运算符“+”“-”“*”“/”和“+=”“-=”“=”“/=”进行重载,完成有理数的加减乘除以及加减乘除复合赋值运算;并且重载“<<”和“>>”操作符完成有理数的输入和输出。最后,重载“==”和“!=”比较两个有理数是否相等。
类的定义如下:
class Rational{private:int z; //分子int m; //分母public:Rational(int a=0, int b=1); //构造有理数分数,分子默认为0,分母默认为1Rational& yuefen(); //约分函数对分数化简friend Rational operator+(const Rational &r1, const Rational &r2);friend Rational operator-(const Rational &r1, const Rational &r2);friend Rational operator*(const Rational &r1, const Rational &r2);friend Rational operator/(const Rational &r1, const Rational &r2);Rational & operator+=(const Rational &r);Rational & operator-=(const Rational &r);Rational & operator*=(const Rational &r);Rational & operator/=(const Rational &r);friend bool operator==(const Rational &, const Rational &);//判断两个有理数是否相等friend bool operator!=(const Rational &, const Rational &);//判断两个有理数是否不等friend ostream & operator<<(ostream &, const Rational &);friend istream & operator>>(istream &, Rational &);};
使用以下的main函数体进行测试:
int main()
{Rational r1, r2, r3;while (cin >> r1 >> r2){cout << "r1 = " << r1 << "\n" << "r2 = " << r2 << endl;r3 = r1 + r2;cout << "r1+r2 = " << r3 << endl;r3 = r1 - r2;cout << "r1-r2 = " << r3 << endl;r3 = r1 * r2;cout << "r1*r2 = " << r3 << endl;r3 = r1 / r2;cout << "r1/r2 = " << r3 << endl;cout << (r1 == r2) << " " << (r1 != r2) << endl;cout << (r1 += r2) << endl;cout << (r1 -= r2) << endl;cout << (r1 *= r2) << endl;cout << (r1 /= r2) << endl;}return 0;
}
输入
输入r1,r2的值
输出
输出r1,r2在各种操作之后的值。
输入样例 1
-4 6 2 -5
输出样例 1
r1 = -2/3 r2 = -2/5 r1+r2 = -16/15 r1-r2 = -4/15 r1*r2 = 4/15 r1/r2 = 5/3 0 1 -16/15 -2/3 4/15 -2/3
提示
Rational& yuefen();
该函数原理是求得分子和分母的最大公约数gcd,然后将m和z除以gcd得到最简分数形式。求最大公约数的方法叫做 辗转相除法,具体可上网查询。- 观察输出,负号总是在分子前,若输入不符合该情形,需做相应处理。
- 分数总以化简形式输出,可在所有成员函数及运算符函数内恰当位置调用
yuefen
// 注意:无需提交main函数和Rational类定义,提交Rational类实现及其他相关代码
#include<iostream>
using namespace std;
class Rational{private:int z; //分子int m; //分母public:Rational(int a = 0, int b = 1); //构造有理数分数,分子默认为0,分母默认为1Rational& yuefen(); //约分函数对分数化简friend Rational operator+(const Rational& r1, const Rational& r2);friend Rational operator-(const Rational& r1, const Rational& r2);friend Rational operator*(const Rational& r1, const Rational& r2);friend Rational operator/(const Rational& r1, const Rational& r2);Rational& operator+=(const Rational& r);Rational& operator-=(const Rational& r);Rational& operator*=(const Rational& r);Rational& operator/=(const Rational& r);friend bool operator==(const Rational&, const Rational&);//判断两个有理数是否相等friend bool operator!=(const Rational&, const Rational&);//判断两个有理数是否不等friend ostream& operator<<(ostream&, const Rational&);friend istream& operator>>(istream&, Rational&);};Rational::Rational(int a, int b)
{z = a;m = b;
}
Rational& Rational::yuefen()
{if (z == 0)return *this;int x, y, r;if (abs(z) > abs(m)) {x = abs(z);y = abs(m);}else {x = abs(m);y = abs(z);}r = x % y;while (r != 0){x = y;y = r;r = x % y;}z = z / y;m = m / y;if (m < 0 && z < 0) {z = abs(z);m = abs(m);}else if (m < 0 && z>0) {z = -z;m = abs(m);}return *this;
}
Rational operator+(const Rational& r1, const Rational& r2)
{Rational r;r.m = r1.m * r2.m;r.z = r1.z * r2.m + r2.z * r1.m;r.yuefen();return r;
}
Rational operator-(const Rational& r1, const Rational& r2)
{Rational r;r.z = r1.z * r2.m - r2.z * r1.m;r.m = r1.m * r2.m;r.yuefen();return r;
}
Rational operator*(const Rational& r1, const Rational& r2)
{Rational r;r.z = r1.z * r2.z;r.m = r1.m * r2.m;r.yuefen();return r;
}
Rational operator/(const Rational& r1, const Rational& r2)
{Rational r;r.z = r1.z * r2.m;r.m = r1.m * r2.z;r.yuefen();return r;
}
Rational& Rational::operator+=(const Rational& r)
{this->z = this->z * r.m + this->m * r.z;this->m = this->m * r.m;this->yuefen();return *this;}Rational& Rational::operator-=(const Rational& r)
{this->z = this->z * r.m - this->m * r.z;this->m = this->m * r.m;this->yuefen();return *this;}Rational& Rational::operator*=(const Rational& r)
{this->z = this->z * r.z;this->m = this->m * r.m;this->yuefen();return *this;
}Rational& Rational::operator/=(const Rational& r)
{this->z = this->z * r.m;this->m = this->m * r.z;this->yuefen();return *this;
}bool operator==(const Rational& r1, const Rational& r2)
{if ((r1.z == r2.z) && (r1.m == r2.m)){return true;}elsereturn false;
}bool operator!=(const Rational& r1, const Rational& r2)
{if ((r1.z != r2.z) || (r1.m != r2.m)){return true;}elsereturn false;
}
ostream& operator<<(ostream& os, const Rational& Ra)
{os << Ra.z << "/" << Ra.m;return os;
}
istream& operator>>(istream& is, Rational& Ra)
{is >> Ra.z >> Ra.m;Ra.yuefen();return is;
}
int main()
{Rational r1, r2, r3;while (cin >> r1 >> r2){cout << "r1 = " << r1 << "\n" << "r2 = " << r2 << endl;r3 = r1 + r2;cout << "r1+r2 = " << r3 << endl;r3 = r1 - r2;cout << "r1-r2 = " << r3 << endl;r3 = r1 * r2;cout << "r1*r2 = " << r3 << endl;r3 = r1 / r2;cout << "r1/r2 = " << r3 << endl;cout << (r1 == r2) << " " << (r1 != r2) << endl;cout << (r1 += r2) << endl;cout << (r1 -= r2) << endl;cout << (r1 *= r2) << endl;cout << (r1 /= r2) << endl;}return 0;
}
Line
描述
表示点和线是几何学的基础。请实现模板类的点(Point2)以及线段(Line2),并计算线段长度 Line2::Length();完成以上类,并通过以下测试
int main()
{Point2<double> pt1(1.0, 1.0);Point2<double> pt2(3.0, 4.0);Line2<double> line(pt1, pt2);cout << line.Length() << endl;int x1,y1, x2, y2;cin >> x1 >> y1 >> x2 >> y2;Line2<int> nLine(Point2<int>(x1, y1), Point2<int>(x2, y2));cout << nLine.Length()<< endl;return 0;
}
输入
两个点的x,y坐标
输出
参考样例输出
输入样例 1
1 2 3 4
输出样例 1
3.60555 2
提示
数学函数头文件为<cmath>
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
template<typename T>
class Point2
{
private:T x;T y;
public:Point2(T a, T b) :x(a), y(b) {}T getX() { return x; }T getY() { return y; }
};
template<typename T>
class Line2 {
private:Point2<T> p1;Point2<T> p2;
public:Line2(Point2<T> a, Point2<T> b) :p1(a), p2(b) {}T Length(){return sqrt(abs((p1.getX() - p2.getX()) * (p1.getX() - p2.getX()) + (p1.getY() - p2.getY()) * (p1.getY() - p2.getY())));}
};
int main()
{Point2<double> pt1(1.0, 1.0);Point2<double> pt2(3.0, 4.0);Line2<double> line(pt1, pt2);cout << line.Length() << endl;int x1, y1, x2, y2;cin >> x1 >> y1 >> x2 >> y2;Line2<int> nLine(Point2<int>(x1, y1), Point2<int>(x2, y2));cout << nLine.Length() << endl;return 0;
}
铁轨
描述
某城市有一个火车站,铁轨铺设如图所示。有n节车厢从A方向驶入车站,按进站顺序编号为1~n。你的任务是让它们按照某种特定的顺序进入B方向的铁轨并驶出车站。为了重组车厢,你可以借助中转站C。这是一个可以停放任意多节车厢的车站,但由于末端封闭,驶入C的车厢必须按照相反的顺序驶出C。对于每个车厢,一旦从A移入C,就不能再回到A了;一旦从C移入B,就不能回到C了。换句话说,在任一时刻,只有两种选择:A->C和C->B。
请编程判断:按给定的出站顺序,火车能否出站。
输入
输入包含多组测试数据,每组数据的第一行是一个正整数n(1<n<1000),第二行是第1个~第n个这n个整数的一个全排列。
输出
对于每一组测试数据,如果能按要求完成车厢重组,请输出“Yes”,否则输出“No”,每组输出占一行。
输入样例 1
5 1 2 3 4 5 5 5 4 1 2 3 6 6 5 4 3 2 1
输出样例 1
Yes No Yes
提示
#include<iostream>
#include<stack>
#include<algorithm>
using namespace std;
int n, rail[1000];
int main()
{while (scanf("%d", &n) == 1){stack<int> s;for (int i = 1; i <= n; i++){scanf("%d", &rail[i]);}int flag, a, b;flag = a = b = 1;while (b <= n){if (a == rail[b]){a++;b++;}else if (!s.empty() && s.top() == rail[b]){s.pop();b++;}else if (a <= n)s.push(a++);else{flag = 0;break;}}printf("%s\n", flag ? "Yes" : "No");}return 0;
}