向量点积计算

GitHub跳转原题关系图返回列表

读入 n 与两个 n 维向量,按同下标配对相乘后累加输出点积。

OJ: roj

题目 ID: 1108

难度:入门

标签:入门数学数组python

创建: 2026-09-29 19:14

更新: 2026-10-05 01:40

题目描述

给两个 nn 维整数向量,求点积 a⋅b=∑aibia\cdot b=\sum a_i b_i。

输入第一行为 nn(1≤n≤10001\le n\le1000),第二、三行各 nn 个整数;输出一个整数。

样例:33,1 4 61\ 4\ 6,2 1 52\ 1\ 5 → 3636。

思路

同下标配对相乘再累加,单次扫描 O(n)O(n);结果用 long long 累加即可。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 19:14
# update_at: 2026-09-29 19:17

import sys


def solve() -> None:
    data = iter(map(int, sys.stdin.buffer.read().split()))
    n = next(data)                                  # 向量维数,也是逐位对齐的位数
    a = [next(data) for _ in range(n)]              # 第一行向量 a 的 n 个分量
    b = [next(data) for _ in range(n)]              # 第二行向量 b 的 n 个分量
    print(sum(ai * bi for ai, bi in zip(a, b)))     # zip 逐位配对,sum 边乘边加


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-05 01:40
 * update_at: 2026-10-05 01:40
 */

#include <cstdio>
#include <iostream>
using namespace std;

typedef long long ll;

const int MAXN = 1005; // n 最大 1000

ll a[MAXN]; // 第一个向量的 n 个分量
ll b[MAXN]; // 第二个向量的 n 个分量

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 1; i <= n; i++) cin >> b[i];

    ll ans = 0; // 点积结果
    for (int i = 1; i <= n; i++) ans += a[i] * b[i];

    cout << ans << "\n";
    return 0;
}