c++打卡第十天
一、问题描述。
有一对兔子,第三个月开始每月生一对兔子,刚出生的兔子经过三个月又可以生一对兔子,问从1月开始到n月,每月兔子的数量。
二、设计思路。
①、第一二个月都是一对兔子,第三个月是2对,3个月是三对,第四个月就是5对。
②、由此可知,这个月兔子对数的总量等于前一个月和前两个月兔子对数的总和。
③、我们可以递归函数实现计算第n个月兔子的总和,即f(n)=f(n-1)+f(n-2);
三、流程图。
四、代码实现
#include<iostream> using namespace std; int f(int x) { if(x==1||x==2) { return 1; } else return f(x-1)+f(x-2); } int main() { int n; cin>>n; int i=1; for(i=1;i<=n;i++) { cout<<i<<" 月兔子总数为:"<<f(i)<<endl; } return 0; }
五、输出结果
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
运算符重载
一、运算符重载本质是写一个函数来实现类中数据成员的加减乘除等等,那么我们这个函数写的方式就类似于我们常用的函数形式。
如:①此函数存在于类中,即成员函数Person operate+(- * / %)(Person &);
②此函数不存在类中,即非成员函数Person operate+(- * / %)(Person & ,Person &);
注:如果是非成员函数,例,友元函数 ,那么其函数后不可跟const,如果添加的话,就会出现以下情况
下边我们通过一个例题来实现运算符重载的应用。
#include<iostream> using namespace std; class Complex { public: Complex(double r=0, double i=0):real(r), imag(i) { } Complex operator+(Complex & ) const;//重载双目运算符'+' Complex operator-=( Complex & ); //重载双目运算符'-=' friend Complex operator-(Complex &,Complex &)const ;//重载双目运算符'-' void Display() const; private: double real; double imag; }; Complex Complex::operator+( Complex &p ) const { Complex temp; temp.real=this->real+p.real; temp.imag=this->imag+p.imag; return temp; } Complex Complex::operator-=( Complex &p ) { Complex temp; real-=p.real; imag-=p.imag; return temp; } Complex operator-( Complex &p,Complex &t)const { Complex temp; temp.real=p.real-t.real; temp.imag=p.imag-t.imag; return temp; } void Complex::Display() const { cout << "(" << real << ", " << imag << ")" << endl; } int main() { double r, m; cin >> r >> m; Complex c1(r, m); cin >> r >> m; Complex c2(r, m); Complex c3 = c1+c2; c3.Display(); c3 = c1-c2; c3.Display(); c3 -= c1; c3.Display(); return 0; }
输入两组值
4 2 3 -5
输出结果
(7, -3) (1, 7) (-3, 5)