C++类和对象练习题

1. 1+2+3+...+n ,要求不能使用乘除法、 for while if else switch case 等关键字及条件判断语句(A?B:C 求1+2+3+...+n_牛客题霸_牛客网 (课堂讲解 )
  class Add
{
        public:
            Add()
            {
                _ret += _i;
                _i++;
            }
           static  int GetRet()
            {
                return _ret;
            }
      
            static void Init()
            {
                _i = 1;
                _ret = 0;
            }
        private:
           static int _i;
           static int _ret;
};
int Add::_i =  0;
int Add::_ret = 0;

class Solution {
public: 
    int Sum_Solution(int n) {
        Add::Init();
        Add arr[n];//新一点的编译器支持的,变长数组c99
        return Add::GetRet();
    }
};
  class Add
{
        public:
            Add()
            {
                _ret += _i;
                _i++;
            }
           
           static int _i;
           static int _ret;
};
int Add::_i =  0;
int Add::_ret = 0;

class Solution {
public: 
    int Sum_Solution(int n) {
        Add::_i = 1;
        Add::_ret = 0;
        Add arr[n];//新一点的编译器支持的,变长数组c99
        return Add::_ret;
    }
};

使用友元

  class Add
{
        friend class Solution;
        public:
            Add()
            {
                _ret += _i;
                _i++;
            }
        private:
           static int _i;
           static int _ret;
};
int Add::_i =  1;
int Add::_ret = 0;

class Solution {
public: 
    int Sum_Solution(int n) {
        Add::_i = 1;
        Add::_ret = 0;
        Add arr[n];//新一点的编译器支持的,变长数组c99
        return Add::_ret;
    }
};

使用内部类

2.计算日期到天数的转换 计算日期到天数转换_牛客题霸_牛客网 (课堂讲解 )
#include <iostream>
using namespace std;

int main()
{
    int year,month,day;
    cin>>year>>month>>day;
    
    //数组中表示1月累加到i月的天数
    int Arr[13] = {0,31,59,90,120,151,181,212,243,273,304,334,365};
    
    int totalDay = Arr[month - 1];
    totalDay += day;
    
    if(month > 2 && ((year%4==0&&year%100!=0)||(year % 400 == 0)))
    {
        totalDay += 1;
    }
    
    cout<<totalDay<<endl;
    return 0;
}

3.日期差值 日期差值_牛客题霸_牛客网 (课后作业 )
构造日期类
#include<iostream>
using namespace std;
static int GetMontyDay[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

struct Date
{
    int year;
    int month;
    int day;
};

Date GetDate(long n)
{
    Date temp;
    temp.year = n/10000;
    temp.month = n/100%100;
    temp.day = n%100;
    return temp;
}

Date operator++(Date& n)
{
    n.day+=1;
    int x = GetMontyDay[n.month];
    if(n.month==2&&(n.year%4==0&&n.year%100!=0||n.year%400==0))
    {
        x++;
    }
    if(n.day>x)
    {
        n.month++;
        n.day = 1;
        if(n.month>12)
        {
            n.year++;
            n.month = 1;
        }
    }
    return n;
}

bool operator==(Date& n1,Date& n2)
{
    return n1.year == n2.year&&n1.month == n2.month && n1.day == n2.day;
}

bool operator!=(Date& n1,Date& n2)
{
    return !(n1==n2);
}

int main()
{
    long n1;
    long n2;
    int ret = 0;
    cin>>n1>>n2;
    Date d1 = GetDate(n1);
    Date d2 = GetDate(n2);
    if(n1>n2)
    {
        while(d1!=d2)
        {
            ++d2;
            ret++;
        }
    }
    else{
        while(d1!=d2)
        {
            ++d1;
            ret++;
        }
    }
    cout<<ret+1<<endl;
    return 0;
}

4.打印日期 打印日期_牛客题霸_牛客网 (课后作业 )
#include<iostream>
using namespace std;

bool isLeapYear(int year)
{
    if((year%4==0&&year%100!=0)||year%400 == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

int GetMonthDay(int year,int month)
{
    int MonthDayArr[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    if(month==2&&isLeapYear(year))
    {
        return 29;
    }
    else
    {
        return MonthDayArr[month];
    }
}

int main()
{
    int year = 0;
    int month = 1;
    int day = 0;
    cin>>year>>day;
    while(day>GetMonthDay(year,month))
    {
        day-=GetMonthDay(year,month);
        month++;
    }
    printf("%d-%.2d-%.2d\n",year,month,day);
    return 0;
}

5.累加天数 日期累加_牛客题霸_牛客网 (课后作业 )
#include<iostream>
using namespace std;
 
bool isLepYear(int year)
{
    if((year%4==0 && year%100!=0)|| year%400==0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
int GetMonthDay(int year,int month)
{
    int MonthDayArr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    if(month ==2 && isLepYear(year))
    {
        return 29;
    }
    else
    {
        return MonthDayArr[month];
    }
}
int main()
{
    int n=0;
    int year=0;
    int month=0;
    int day=0;
    int DaySum=0;
    cin>>n;
    while(n--)
    {
        cin>>year>>month>>day>>DaySum;
        day+=DaySum;   
         
        while(day > GetMonthDay(year,month))
        {
            day-=GetMonthDay(year,month);
            month++;
            if(month==13)
            {
                month=1;
                year+=1;
            }
        }    
         
            printf("%d-%.2d-%.2d\n",year,month,day);
        }
     
    return 0;
}

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值