码蹄集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;
}