【Code Pratice】—— 第几天、K倍区间、煤球数量
文章目錄
- 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月有幾天,思路如下
邏輯代碼
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ù),代表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)得出思路
邏輯代碼
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)題。
- 上一篇: OSG系统的学习
- 下一篇: 直播平台开发直播特效的原理与难点