1.分巧克力 (AC100%)

#include <iostream>
using namespace std;

int chocolate[100];

int gcd(int a, int b) {
    return (a % b == 0 ? b : gcd(b, a % b));
}

int main(int argc, char const *argv[])
{
    int n;
    int tmp;
    cin >> n;

    cin >> chocolate[0];
    tmp = chocolate[0];

    for(int i = 1; i < n; ++i) {
        cin >> chocolate[i];
        tmp = gcd(tmp, chocolate[i]);
    }

    cout << tmp << endl;
    return 0;
}

2.除夕夜A (AC100%)

#include <iostream>
using namespace std;

const int SUM_SECOND = 240;

int main(int argc, char const *argv[])
{
    int n; // 题数
    int m; // 走出房间时间

    cin >> n;
    cin >> m;

    int res = 0; // 做的题数
    int sumTime = SUM_SECOND - m;

    while(res < n) {
        sumTime -= (res + 1) * 5;
        if(sumTime >= 0) {
            ++res;
        } else {
            break;
        }
    }

    cout << res << endl;

    return 0;
}

3.求和A (AC100%)

#include <iostream>
using namespace std;

const int MAX = 1e6;

int num[MAX];
int leftSum[MAX]; // leftSum[i]表示num[0] + num[1] + ... + num[i]
int righSum[MAX]; // rightSum[i]表示num[i] + num[i + 1] + ... + num[n - 1]

void cntLeftEqualsToRight(int n) {
    int res = 0;

    // left to right
    cin >> num[0];
    int tmp = num[0];
    leftSum[0] = tmp;
    for(int i = 1; i < n; ++i) {
        cin >> num[i];
        tmp += num[i];
        leftSum[i] = tmp;
    }

    // right to left
    tmp = num[n - 1];
    righSum[n - 1] = tmp;
    for(int i = n - 2; i >= 0; --i) {
        tmp += num[i];
        righSum[i] = tmp;

        if(righSum[i + 1] == leftSum[i]) {
            ++res;
        }
    }

    cout << res << endl;
}

int main(int argc, char const *argv[])
{
    int n = 9;

    while(cin >> n != NULL) {
        cntLeftEqualsToRight(n);
    }

    return 0;
}