1. 小红的数组构造

本题大家不要想着真去模拟数组的情况,那样就想复杂了。

数组只能是:1k、2k、3k ... (n-1)k、nk,这样 总和就是最小的。

注意最后的和可能超过int,所以用 long long。

代码如下:

#include <iostream>
using namespace std;
int main () {
    long long result = 0; 
    int n, k;
    cin >> n >> k;
    for (int i = 1; i <= n; i++) {
        result += i * k;
    }
    cout << result << endl;
}
1
2
3
4
5
6
7
8
9
10
11

优化思路:

由于要计算1到n的整数之和,可以利用等差数列求和公式来优化计算。

和公式:1 + 2 + 3 + ... + n = n * (n + 1) / 2

因此,总和 result = k * (n * (n + 1) / 2)


#include <iostream>
using namespace std;

int main() {
    long long result = 0;
    int n, k;
    cin >> n >> k;

    // 使用等差数列求和公式进行计算
    result = k * (n * (n + 1LL) / 2);

    cout << result << endl;
    return 0;
}
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
上次更新:: 3/4/2025, 5:49:45 PM
@2021-2025 代码随想录 版权所有 粤ICP备19156078号