碼蹄集OJ-四大名著-水滸簽到
一、題目背景
本問題以《水滸傳》為故事經緯,講述史進對數列數字奧秘的探索。小碼妹向其講解特殊數列求和規則,我們需依據規則,對給定長度?n
?的數列,按奇偶分組方式計算奇數組和與偶數組和的運算結果(奇數組求和、偶數組作差,交替進行 ),完成這場時空探險中的數字挑戰。
二、問題規則
(一)分組方式
現有長度為?n
?的數列?a1?,a2?,?,an??,分組規則如下:
- 若?
n
?為偶數,將數列分成?2n??組,依次為:第 1 組?a1?,a2??,第 2 組?a3?,a4??,第 3 組?a5?,a6??,…… ,第?2n??組?an?1?,an??。 - 若?
n
?為奇數,將數列分成?2n+1??組,依次為:第 1 組?a1?,a2??,第 2 組?a3?,a4??,第 3 組?a5?,a6??,…… ,第?2n+1??組?an?(最后一組僅含一個元素 )。
(二)求和邏輯
計算所有奇數組數字和與偶數組數字和,規則為:奇數組對應組內元素求和后做加法運算,偶數組對應組內元素求和后做減法運算,交替進行。例如:
- 當?n=6(偶數),計算式為?a1?+a2??a3??a4?+a5?+a6??。
- 當?n=7(奇數),計算式為?a1?+a2??a3??a4?+a5?+a6??a7??。
三、輸入輸出格式
(一)輸入格式
- 第一行:一個整數?
n
(1≤n≤105?),表示數列的長度。 - 第二行:
n
?個整數?a1?,a2?,?,an?(1≤ai?≤109?),為數列的具體元素。
(二)輸出格式
一行一個整數,為按照上述分組求和規則計算得到的結果。
四、樣例解析
(一)樣例 1
- 輸入:
6
3 2 1 4 5 6
- 分組與計算:
n = 6
?是偶數,共分 3 組。第 1 組?3,2(奇數組,和為?3+2=5?);第 2 組?1,4(偶數組,和為?1+4=5?);第 3 組?5,6(奇數組,和為?5+6=11?)。- 計算式:5?5+11=11?,與輸出結果一致。
(二)樣例 2
- 輸入:
7
6 6 1 2 3 5 5
- 分組與計算:
n = 7
?是奇數,共分 4 組。第 1 組?6,6(奇數組,和為?6+6=12?);第 2 組?1,2(偶數組,和為?1+2=3?);第 3 組?3,5(奇數組,和為?3+5=8?);第 4 組?5(偶數組,和為?5?)。- 計算式:12?3+8?5=12?,與輸出結果一致。
代碼:
?
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;int main()
{int sum = 0; int n;cin >> n;vector <ll> a(n+10,0); for(int i = 1 ; i <= n ; i++)cin >> a[i];int i = 1, j = 2;bool isOddGroup = true; // 標記當前是否為奇數組while(i <= n){if(isOddGroup) //奇數組{sum += a[i];if(j <= n) sum += a[j]; }else//偶數組{ sum -= a[i];if(j <= n) sum -= a[j]; }i += 2, j += 2;isOddGroup = !isOddGroup; // 切換奇偶組}cout << sum;return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;int main()
{int sum = 0; int n;cin >> n;vector <ll> a(n+10,0); // 數組開大為n+10,并初始化為0// 讀取n個元素for(int i = 1 ; i <= n ; i++)cin >> a[i];int i = 1, j = 2;bool isOddGroup = true; // 標記當前是否為奇數組// 循環處理每組元素,直到i超出有效范圍while(i <= n){if(isOddGroup){// 奇數組:加上當前組的元素和sum += (a[i] + a[j]);}else{// 偶數組:減去當前組的元素和sum -= (a[i] + a[j]);}// 移動到下一組i += 2;j += 2;isOddGroup = !isOddGroup; // 切換奇偶組}cout << sum;return 0;
}