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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

文章目錄

  • 1 | 第幾天
    • 題目
    • 思路
    • 邏輯代碼
  • 2 | K倍區(qū)間
    • 題目
    • 思路
    • 邏輯代碼
  • 3 | 煤球數(shù)目
    • 題目
    • 思路
    • 邏輯代碼

1 | 第幾天

題目

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

思路

判斷日期是一年中的第幾天問(wèn)題,實(shí)際就是一個(gè)邏輯加法運(yùn)算,只需要從當(dāng)年的一月一號(hào)開(kāi)始計(jì)算,一直累加到給定的日期的天數(shù)即可,主要邏輯在于區(qū)分哪些月的總天數(shù)有多少,如哪些月有31天,哪些有30,2月有幾天,思路如下

  • 首先判斷日期年份是閏年還是平年,以決定二月份的準(zhǔn)確天數(shù)
  • 從一月一號(hào)開(kāi)始累加,一直累加到給定的日期
  • 邏輯代碼

    int WhatDay(int i_uYear, int i_uMonth, int i_uDay) {int sum = 0;// 入口保護(hù)if (!IsValidDate(i_uYear, i_uMonth, i_uDay)){return sum;}int FebruaryDays = 28;// 判斷是閏年還是平年if (IsLeapYear(i_uYear)){FebruaryDays = 29;}// 天數(shù)累加計(jì)算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倍區(qū)間

    題目

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

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

    輸出格式:

    輸出一個(gè)整數(shù),代表K倍區(qū)間的數(shù)目。 example: 6

    思路

    本題實(shí)質(zhì)上是計(jì)算某幾個(gè)連續(xù)的數(shù)字的和是否等于k的倍數(shù),連續(xù)的數(shù)字就說(shuō)明是從頭到尾的遍歷則個(gè)數(shù)列,和就是從遍歷的第一個(gè)數(shù)字開(kāi)始累加,k的倍數(shù)就是和的值是否等于n * k(n為正整數(shù)),所以按照這三個(gè)點(diǎn)得出思路

  • 選擇第一個(gè)元素作為火車(chē)頭,從頭開(kāi)始遍歷當(dāng)前數(shù)列
  • 計(jì)算當(dāng)前遍歷過(guò)的所有數(shù)字的和
  • 對(duì)比計(jì)算的和是否等于k的倍數(shù)
  • 選擇下一個(gè)元素作為火車(chē)頭,重復(fù)執(zhí)行1, 2, 3步驟,直到選擇到最后一個(gè)元素為止
  • 邏輯代碼

    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 | 煤球數(shù)目

    題目

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

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

    如果一共有100層,共有多少個(gè)煤球?

    思路

    這是一道數(shù)學(xué)題,只要找出每一層的煤球數(shù)目的規(guī)律,再進(jìn)行求和即可,如下

  • 找每一項(xiàng)的規(guī)律
    3 - 1 = 2
    6 - 3 = 3
    10 - 6 = 4
    ……
    A(n-1) - A(n-2) = n - 1
    A(n) - A(n-1) = n
    以上每個(gè)式子相加 --> 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項(xiàng)求和
    Sn = A(n) + A(n-1) + …… + 10 + 6 + 3 + 1 = (n^3 + 3*n^2 + 2n) / 6
    所以前一百層煤球總數(shù)等于求前100項(xiàng)和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; }

    總結(jié)

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

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。