1,写出计算Ack(m,n)的递归算法

- #include<iostream>
- using namespace std;
- int A(int m,int n){
- if(m==0){
- return n+1;
- }
- else if(m>0&&n==0){
- return A(m-1,1);
- }
- else{
- return A(m-1,A(m,n-1));
- }
- }
-
-
- int main(){
- int m,n;
- cout<<"please input two number"<<endl;
- cin>>m>>n;
- cout<<A(m,n)<<endl;
- return 0;
- }
2,写一个 IntToStr(int a)函数将一个整形数转换为字符串
- //法一
- #include<iostream>
- #include<string>
- #include<sstream>
- using namespace std;
- string intToString(int num)
- {
- stringstream s;
- s<<num;
- string str;
- s>>str;
- return str;
- }
-
- int main(){
- cout<<intToString(3)<<endl;
- return 0;
- }
-
- //法二
- #include<iostream>
- #include<string>
- #include<sstream>
- using namespace std;
- string intToString(int num)
- {
- string r =" ";
- while(num){
- int n =num%10;
- r =char('0'+n)+r;//将数字转换成字符拼接到r前面
- num =num/10;
- }
- return r;
- }
-
- int main(){
- cout<<intToString(15)<<endl;
- return 0;
- }
3,//写一个 swap(int a[], int m, int n ),使得数组的前 m 项和后 n 项交换位置
- //写一个 swap(int a[], int m, int n )
- //使得数组的前 m 项和后 n 项交换位置
- #include<iostream>
- using namespace std;
- void reverse(int a[],int m,int n){
- while(m<n){
- int temp = a[m];
- a[m] = a[n];
- a[n] = temp;
- m++;
- n--;
- }
- }
- void swap(int a[],int m,int n,int k){
- reverse(a,0,m-1);//反转前m个数
- reverse(a,m,k-n-1);//反转中间的数
- reverse(a,k-n,k-1);//反转后n个数
- reverse(a,0,k-1);//反转整个数组
- }
-
- int main(){
- int a[]={1,2,3,5,6,7};
- int k= 6;
- swap(a,2,2,k);
- for(int i=0;i<k;i++){
- cout<<a[i]<<" ";
- }
- return 0;
- }
4,
- //(1)写一个日期 Date 类,成员有年月日,成员函数有无参数构造函数、设置年月日的函数 setDate,还有一个打印函数 display
- //(2)第二个类是员工类 Employee,成员有工号、姓名、身份证号、出生日期、受聘日期、聘用年限、月薪
- //成员函数要有构造函数、改变出生日期函数、改变聘用年限函数、改变月薪函数、续聘函数(要求当续聘后的年龄大于 60 时给提示不能续聘)
- //还有展示函数 display,需要有工号、姓名、身份证号、出生日期、聘用到期时间、聘用年限、年薪,注意第二个类会有 Date 类或其指针作为成员
- #include<iostream>
- #include<string>
- using namespace std;
- class Date{
- public:
- Date(int y=0,int m= 0,int d= 0):year(y),month(m),day(d){}
- Date(Date &d){
- this->year = d.year;
- this->month =d.month;
- this->day =d.day ;
- }
- void setDate(int y,int m,int d){
- year = y;
- month = m;
- day = d;
- }
- int getyear() const{
- return year;
- }
- int getmonth()const{
- return month;
- }
- int getday() const{
- return day;
- }
- void display()const{
- cout<<year<<"-"<<month<<"-"<<day;
- }
- private:
- int year;
- int month;
- int day;
- };
- class Employee{
- public:
- Employee(long id,string name,long number,Date birthday,Date workday,int workyear,double salary){
- this->id = id;
- this->name = name;
- this->number = number;
- this->number = number;
- this->birthday = birthday;
- this->workday = workday;
- this->workyear = workyear;
- this->salary = salary;
- }
- void changeBirthday(Date newdate){
- birthday = newdate;
- }
- void changeworkyear(int newyear){
- workyear = newyear;
- }
- void changesalary(double newsalary){
- salary = newsalary;
- }
- void renewContract(int time) { // 续聘
- if (birthday.getyear()+time > 60){
- cout<<"续聘不成功"<<endl;
- }
- else
- {
- workyear+=time;
- }
- }
- //还有展示函数 display,需要有工号、姓名、身份证号、出生日期、聘用到期时间、聘用年限、年薪
- void display()const{
- cout << "工号:" << id << " 姓名:" << name << " 身份证号:" << number << " 出生日期:";
- birthday.display();
- cout<<"聘用到期时间"<<workday.getyear() +workyear<<"年"<<workday.getmonth()<<"月"<<workday.getday() <<"日";
- cout<<"聘用年限"<<workyear<<"年薪"<<salary<<endl;
-
- }
- private:
- long id;
- string name;
- long number;
- Date birthday;
- Date workday;
- int workyear;
- double salary;
- };
-
- int main(){
- Date birth(1990, 10, 25); // 创建出生日期对象
- Date hire(2020, 5, 15); // 创建聘用日期对象
-
- Employee emp(1001, "John Doe", 1234567890, birth, hire, 3, 5000.0); // 创建员工对象
-
- emp.display(); //
- emp.renewContract(20);
- return 0;
- }