日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Code Pratice】—— 第几天、K倍区间、煤球数量

發布時間:2024/1/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Code Pratice】—— 第几天、K倍区间、煤球数量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1 | 第幾天
    • 題目
    • 思路
    • 邏輯代碼
  • 2 | K倍區間
    • 題目
    • 思路
    • 邏輯代碼
  • 3 | 煤球數目
    • 題目
    • 思路
    • 邏輯代碼

1 | 第幾天

題目

y年m月d日是哪一年的第幾天。
比如y年的1月1日是那一年的第一天,那么2000年7月7日是那一年的第幾天。

思路

判斷日期是一年中的第幾天問題,實際就是一個邏輯加法運算,只需要從當年的一月一號開始計算,一直累加到給定的日期的天數即可,主要邏輯在于區分哪些月的總天數有多少,如哪些月有31天,哪些有30,2月有幾天,思路如下

  • 首先判斷日期年份是閏年還是平年,以決定二月份的準確天數
  • 從一月一號開始累加,一直累加到給定的日期
  • 邏輯代碼

    int WhatDay(int i_uYear, int i_uMonth, int i_uDay) {int sum = 0;// 入口保護if (!IsValidDate(i_uYear, i_uMonth, i_uDay)){return sum;}int FebruaryDays = 28;// 判斷是閏年還是平年if (IsLeapYear(i_uYear)){FebruaryDays = 29;}// 天數累加計算for (int i = 1; i <= i_uMonth; i++){if (i_uMonth == i){sum += i_uDay;}else{if (2 == i){sum += FebruaryDays;}// 判斷是不是有31天的月份else if (IsBigMonth(i)){sum += 31;}else {sum += 30;}}}return sum; }

    2 | K倍區間

    題目

    給定一個長度為N的數列,A1, A2, … AN,如果其中一段連續的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍數,我們就稱這個區間[i, j]是K倍區間。
    你能求出數列中總共有多少個K倍區間嗎?
    輸入格式:

    第一行包含兩個整數N和K。(1 <= N, K <= 100000) 第二行包含N個整數Ai。(1 <= Ai <= 100000) example: 5 2 1 2 3 4 5

    輸出格式:

    輸出一個整數,代表K倍區間的數目。 example: 6

    思路

    本題實質上是計算某幾個連續的數字的和是否等于k的倍數,連續的數字就說明是從頭到尾的遍歷則個數列,和就是從遍歷的第一個數字開始累加,k的倍數就是和的值是否等于n * k(n為正整數),所以按照這三個點得出思路

  • 選擇第一個元素作為火車頭,從頭開始遍歷當前數列
  • 計算當前遍歷過的所有數字的和
  • 對比計算的和是否等于k的倍數
  • 選擇下一個元素作為火車頭,重復執行1, 2, 3步驟,直到選擇到最后一個元素為止
  • 邏輯代碼

    int KTimesInterval(vector<int>& i_uArr, int i_uN, int i_uK) {int res = -1;if (i_uN != i_uArr.size()){return res;}res = 0;for (int i = 0; i < i_uN; i++){int sum = 0;for (int j = i; j < i_uN; j++){sum += i_uArr[j];if (0 == sum % i_uK){res++;}}}return res; }

    3 | 煤球數目

    題目

    有一堆煤球,堆成三角棱錐形。具體:
    第一層放1個,
    第二層3個(排列成三角形),
    第三層6個(排列成三角形),
    第四層10個(排列成三角形),

    ********** **********

    如果一共有100層,共有多少個煤球?

    思路

    這是一道數學題,只要找出每一層的煤球數目的規律,再進行求和即可,如下

  • 找每一項的規律
    3 - 1 = 2
    6 - 3 = 3
    10 - 6 = 4
    ……
    A(n-1) - A(n-2) = n - 1
    A(n) - A(n-1) = n
    以上每個式子相加 --> A(n) - A(n-1) + A(n-1) + A(n-2) + …… + A(3) - A(2) + A(2) - A(1)
    即 A(n) = n * (n + 1) / 2

  • 前n項求和
    Sn = A(n) + A(n-1) + …… + 10 + 6 + 3 + 1 = (n^3 + 3*n^2 + 2n) / 6
    所以前一百層煤球總數等于求前100項和S(100)

  • 邏輯代碼

    int NumberOfBriquettes(int i_uNum) {int res = 0;if (0 > i_uNum){return res;}res = ((i_uNum * i_uNum * i_uNum) + (3 * i_uNum * i_uNum) + (2 * i_uNum)) / 6;return res; }

    總結

    以上是生活随笔為你收集整理的【Code Pratice】—— 第几天、K倍区间、煤球数量的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。