最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中日期類的常見題目合集分享

 更新時間:2023年06月21日 10:34:46   作者:不 良  
這篇文章主要為大家詳細介紹了一些C++中日期類的常見題目,文中的示例代碼講解詳細,對我們掌握C++有一定的幫助,感興趣的小伙伴可以了解一下

求1+2+3+…+n

題目:

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關(guān)鍵字及條件判斷語句(A?B:C)。

數(shù)據(jù)范圍: 0<n≤200

進階: 空間復雜度 O(1) ,時間復雜度O(n)

示例1:

輸入:5
返回值:15

示例2:

輸入:1
返回值:1

思路一:

根據(jù)我們剛學的內(nèi)部類的方法進行求解,通過調(diào)用n次構(gòu)造函數(shù)來計算和,從_i = 1開始計算,每調(diào)用一次構(gòu)造函數(shù)_i++一次,一共調(diào)用n次構(gòu)造函數(shù),也就計算出1+2+……+n。

代碼一:使用內(nèi)部類和靜態(tài)成員變量的方法

#include <unistd.h>
class Solution {
public:
class Sum{
public:
    Sum()
    {
        _sum += _i;
        _i++;
    }
};
    int Sum_Solution(int n) {
        Sum a[n];
        return _sum;
    }
private:
    static int _i;
    static int _sum;
};
int Solution::_i = 1;
int Solution::_sum = 0;

代碼二:使用靜態(tài)成員函數(shù)和靜態(tài)成員變量

class Sum{
public:
    //構(gòu)造函數(shù)
    Sum()
    {
        _sum += _i;
        _i++;
    }
    //對靜態(tài)成員變量初始化
    static void Init()
    {
        _i = 1;
        _sum = 0;
    }
    //獲取成員變量的值
    static int GetSum()
    {
        return _sum;
    }
private:
    static int _i;
    static int _sum;
};
class Solution {
public:
    int Sum_Solution(int n) {
        Sum::Init();
        //Sum a[n];//變長數(shù)組
        Sum* p = new Sum[n];
        return Sum::GetSum();
    }
};
//靜態(tài)成員變量的定義
int Sum::_i = 1;
int Sum::_sum = 0;

時間復雜度:O(1)

空間復雜度:O(N)

計算日期到天數(shù)轉(zhuǎn)換

題目:

根據(jù)輸入的日期,計算是這一年的第幾天。

保證年份為4位數(shù)且日期合法。

進階:時間復雜度:O*(*n) ,空間復雜度:O(1)

輸入描述:輸入一行,每行空格分割,分別是年,月,日

輸出描述:輸出是這一年的第幾天

示例1:

輸入:2012 12 31
輸出:366

示例2:

輸入:1982 3 4
輸出:63

思路一:

將每個月的天數(shù)使用數(shù)組存儲起來,然后將前n-1個月份的天數(shù)相加再加上第n月的天數(shù)即是總的天數(shù)。此外要注意2月份的天數(shù)變化。

代碼:

#include <iostream>
using namespace std;
int GetDay(int year, int month)
{
    //將每個月的天數(shù)存儲起來
    int monthday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    //當月份為2月且為閏年時2月份有29天
    if (month == 2)
    {
        if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
        {
            return monthday[month] + 1;
        }
    }
    return monthday[month];
}
int main() {
    int year;
    int day;
    int month;
    cin >> year >> month >> day;
    if (year < 1000 || year > 9999 || month > 13 || day <= 0 || day > GetDay(year,month) )
    {
        exit(0);
    }
    int sum = 0;
    //將前n-1月的天數(shù)相加
    while (month--)
    {
        sum += GetDay(year, month);
    }
    //加上本月的天數(shù)
    sum += day;
    cout << sum << endl;
    return 0;
}

時間復雜度:O(N)

空間復雜度:O(1)

思路二:

直接將前n個月份合計天數(shù)放到數(shù)組中,然后計算。

代碼:

#include <iostream>
using namespace std;
int GetDay(int year,int month)
{
    //將前n個月的天數(shù)之和算出來
    int arr[12]={0,31,59,90,120,151,181,212,243,273,304,334};
    //判斷是否是閏年
    if((month >= 2) && (year % 400 == 0 || year%4 == 0 && year %100 != 0))
    {
        return arr[month]+1;
    }
    return arr[month];
}
int main() {
    int year,month,day;
    cin >> year >> month >> day;
    //計算總共的天數(shù)
    int num = GetDay(year, month-1) + day;
    cout << num << endl;
    return 0;
}

時間復雜度:O(1)

空間復雜度:O(1)

日期差值

題目:

有兩個日期,求兩個日期之間的天數(shù),如果兩個日期是連續(xù)的我們規(guī)定他們之間的天數(shù)為兩天。

輸入描述:有多組數(shù)據(jù),每組數(shù)據(jù)有兩行,分別表示兩個日期,形式為YYYYMMDD

輸出描述:每組數(shù)據(jù)輸出一行,即日期差值

示例1:

輸入:20110412
    20110422
輸出:11

思路一:

當我們要計算同年同月不同天的日期差值時,只需要相減之后再加1即可;計算同年不同月的日期,先將小日期的當月天數(shù)加進去然后再計算日期之間的差值;不同年的時候直接按照年的天數(shù)相加直至年份相等,然后再進行月份相隔天數(shù)的計算。

代碼:

#include <iostream>
using namespace std;
//獲取月份天數(shù)
int GetDay(int year, int month) {
    int monthday[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    if (month == 2) {
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            return monthday[month] + 1;
        }
    }
    return monthday[month];
}
int main() {
    int n1;
    int n2;
    while (cin >> n1 >> n2) {
        //確保日期n1小于日期n2
        if(n1 > n2)
        {
            int tmp = n1;
            n1 = n2;
            n2 = tmp;
???????        }
        //將日期按照年月日分割
        int day1 = n1 % 100;
        int day2 = n2 % 100;
        n1 = n1 / 100;
        n2 = n2 / 100;
        int month1 = n1 % 100;
        int month2 = n2 % 100;
        n1 = n1 / 100;
        n2 = n2 / 100;
        int year1 = n1;
        int year2 = n2;
        //當年月日都相同時返回0
        if (year1 == year2 && month1 == month2 && day1 == day2)
            cout << "0" << endl;
        //當年月相同日不同時返回
        else if (year1 == year2 && month1 == month2)
            cout << (day2 - day1) + 1 << endl;
        //當年相同其他都不相同時
        else if (year1 == year2) {
            int sum = 0;
            while (month1 != month2) {
                sum += GetDay(year1, month1);
                month1++;
            }
            sum = sum + day2 - day1 + 1;
            cout << sum << endl;
        } 
        //當年月日都不相同時
        else {
            int sum = 0;
            while (year1 != year2) {
                if (year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0)) {
                    sum += 366;
                } else {
                    sum += 365;
                }
                year1++;
            }
            while (month1 != month2) {
                sum += GetDay(year1, month1);
                month1++;
            }
            sum = sum + day2 - day1 + 1;
            cout << sum << endl;
        }
    }
    return 0;
}

時間復雜度:O(N)

空間復雜度:O(1)

打印日期

題目:

給出年分m和一年中的第n天,算出第n天是幾月幾號。

輸入描述:輸入包括兩個整數(shù)y(1<=y<=3000),n(1<=n<=366)。

輸出描述:可能有多組測試數(shù)據(jù),對于每組數(shù)據(jù), 按 yyyy-mm-dd的格式將輸入中對應(yīng)的日期打印出來。

示例1:

輸入:

2000 3
2000 31
2000 40
2000 60
2000 61
2001 60

輸出:

2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01

思路:

將每個月的天數(shù)存到數(shù)組中,按照1月份開始往后計算。

代碼:

#include <iostream>
using namespace std;
int main() {
    int year,n;
    int monthday[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    while(cin >> year >> n)
    {
        int month = 1;//month從1月份開始
        int day = n;
        //判斷是否是閏年
        if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
            monthday[2] += 1;//閏年2月份為29天
        }
        //判斷天數(shù)
        while(day > monthday[month])
        {
            day = day - monthday[month];
            month++;
        }
        printf("%d-%02d-%02d\n", year, month, day);
    }
    return 0;
}

時間復雜度:O(N)

空間復雜度:O(1)

日期累加

題目:

設(shè)計一個程序能計算一個日期加上若干天后是什么日期。

輸入描述:輸入第一行表示樣例個數(shù)m,接下來m行每行四個整數(shù)分別表示年月日和累加的天數(shù)。

輸出描述:輸出m行,每行按yyyy-mm-dd的個數(shù)輸出。

示例:

輸入:
1
2008 2 3 100
輸出:
2008-05-13

思路:

先將日期和要累加的天數(shù)相加然后通過比較當月日期是否合法,逐漸向后減。

代碼:

#include <iostream>
using namespace std;
//獲取當前月份的天數(shù)
int GetDay(int year, int month)
{
   int monthday[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    //當月份為2月且1是閏年時2月份有31天
   if(month == 2)
   {
        if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
            return monthday[month]+1;
        }
   }
   return monthday[month];
}
int main() {
    int m = 0;
    cin >> m;
    for(int i = 0; i < m; i++)
    {
        int year,month,day,n;
        while(cin >> year >> month >> day >> n)
        {
            day = day + n;
            while(day > GetDay(year, month))
            {
                day = day - GetDay(year, month);
                month++;
                if(month > 12)
                {
                    year++;
                    month = 1;
                }
            }
            printf("%d-%02d-%02d\n",year,month,day);
        }
    }
}

時間復雜度:O(N)

空間復雜度:O(1)

以上就是C++中日期類的常見題目合集分享的詳細內(nèi)容,更多關(guān)于C++日期類的資料請關(guān)注腳本之家其它相關(guān)文

相關(guān)文章

  • ubuntu 下編譯C++代碼出現(xiàn)的問題解決

    ubuntu 下編譯C++代碼出現(xiàn)的問題解決

    這篇文章主要介紹了ubuntu 下編譯C++代碼出現(xiàn)的問題解決的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • C語言實現(xiàn)求定積分的方法

    C語言實現(xiàn)求定積分的方法

    這篇文章主要介紹了C語言實現(xiàn)求定積分的方法,涉及C語言操作相關(guān)數(shù)學函數(shù)的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • C++ 成員變量的初始化順序問題詳解

    C++ 成員變量的初始化順序問題詳解

    這篇文章主要介紹了C++ 成員變量的初始化順序問題詳解的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C語言程序環(huán)境編譯+鏈接理論

    C語言程序環(huán)境編譯+鏈接理論

    這篇文章主要介紹了C語言程序環(huán)境編譯+鏈接理論,下面文章基于C語言的相關(guān)資料展開對編譯和鏈接的詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • 深入分析:C++模板究竟會使代碼膨脹嗎

    深入分析:C++模板究竟會使代碼膨脹嗎

    今天和同事說到C++模板會使代碼膨脹, 可同事覺得不會。 同事的依據(jù)是: 如果模板會使代碼膨脹, 那么ATL和WTL里為什么還要大量使用模板? 同樣功能 ,ATL和WTL編譯出的可執(zhí)行文件可比MFC編譯的要小的多
    2013-04-04
  • C++鏈表實現(xiàn)通訊錄設(shè)計

    C++鏈表實現(xiàn)通訊錄設(shè)計

    這篇文章主要為大家詳細介紹了C++鏈表實現(xiàn)通訊錄設(shè)計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++編程析構(gòu)函數(shù)拷貝構(gòu)造函數(shù)使用示例詳解

    C++編程析構(gòu)函數(shù)拷貝構(gòu)造函數(shù)使用示例詳解

    這篇文章主要為大家介紹了C++編程構(gòu)造函數(shù)中析構(gòu)函數(shù)及拷貝構(gòu)造函數(shù)的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • 利用Matlab繪制地圖的超詳細教程

    利用Matlab繪制地圖的超詳細教程

    worldmap和usamap是axesm的子類,worldmap是用于生成世界地圖坐標區(qū)域,usamap用于生成美國地圖坐標區(qū)域。本文將詳細為大家介紹如何利用這兩個函數(shù)繪制地圖,需要的可以參考一下
    2022-02-02
  • C/C++ Qt QChart繪圖組件的具體使用

    C/C++ Qt QChart繪圖組件的具體使用

    QtCharts 組件是QT中提供圖表繪制的模塊,用來繪制常規(guī)圖形,本文就詳細的介紹了QChart的使用,以及柱狀圖,折線圖等常用的圖形的實現(xiàn),感興趣的可以了解一下
    2021-11-11
  • C語言實現(xiàn)三子棋(井字棋)算法

    C語言實現(xiàn)三子棋(井字棋)算法

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)三子棋(井字棋)算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

通渭县| 大庆市| 孝义市| 台中市| 太保市| 普安县| 大关县| 瑞金市| 名山县| 雷山县| 永福县| 汝南县| 清流县| 肃宁县| 昌都县| 新安县| 中江县| 乌兰县| 石楼县| 台东市| 泸溪县| 胶南市| 武强县| 苗栗市| 马公市| 巴青县| 贵定县| 临江市| 当雄县| 白城市| 大厂| 封丘县| 铁岭市| 肇东市| 易门县| 永修县| 安康市| 龙里县| 汤原县| 甘谷县| 资中县|