MC0463四大名著-水浒签到

码蹄集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 
using namespace std;
typedef long long ll;

int main()
{
    int sum = 0; 
    int n;
    cin >> n;
    vector  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 
using namespace std;
typedef long long ll;

int main()
{
    int sum = 0; 
    int n;
    cin >> n;
    vector  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;
}

你可能感兴趣的:(算法)