luogu-B2091 向量点积计算

luogu-B2091 向量点积计算

GESP三级练习,一维数组练习(C++三级大纲中5号知识点,一维数组),难度★☆☆☆☆。

luogu-B2091 向量点积计算

题目要求

题目描述

在线性代数、计算几何中,向量点积是一种十分重要的运算。

给定两个 nn 维向量 a=(a1,a2,,an)a=(a_1,a_2, \cdots ,a_n)b=(b1,b2,,bn)b=(b_1,b_2, \cdots ,b_n),求点积 aa · b=a1b1+a2b2++anbnb=a_1b_1+a_2b_2+ \cdots +a_nb_n

输入格式

第一行是一个整数 nn1n10001 \le n \le 1000

第二行包含 nn 个整数 a1,a2,,ana_1,a_2, \cdots ,a_n

第三行包含 nn 个整数 b1,b2,,bnb_1,b_2, \cdots ,b_n

相邻整数之间用单个空格隔开。每个整数的绝对值都不超过 10001000

输出格式

一个整数,即两个向量的点积结果。

输入输出样例 #1

输入 #1

3
1 4 6
2 1 5

输出 #1

36

题目分析

解题思路

  1. 首先需要输入向量维度n
  2. 输入第一个向量的n个分量并存入数组中
  3. 输入第二个向量的n个分量并存入数组中
  4. 遍历两个数组,计算对应位置的乘积并累加
  5. 输出最终的点积结果

复杂度分析:

  • 输入两个向量的时间复杂度为 O(n)O(n)
  • 计算点积的时间复杂度为 O(n)O(n),需要遍历一次数组
  • 因此总时间复杂度为 O(n)O(n)
  • 空间复杂度为 O(n)O(n),需要存储两个n维向量

{% include custom/custom-post-content-inner.html %}


示例代码

#include <iostream>

int main() {
    // 声明变量n用于存储向量维度
    int n;
    // 输入向量维度
    std::cin >> n;
    // 声明两个数组用于存储两个向量的分量
    int ary_1[n];
    int ary_2[n];
    // 输入第一个向量的所有分量
    for (int i = 0; i < n; i++) {
        std::cin >> ary_1[i];
    }
    // 输入第二个向量的所有分量
    for (int i = 0; i < n; i++) {
        std::cin >> ary_2[i];
    }
    // 初始化sum变量用于存储点积结果
    int sum = 0;
    // 计算两个向量的点积
    for (int i = 0; i < n; i++) {
        sum += ary_1[i] * ary_2[i];
    }
    // 输出点积结果
    std::cout << sum;
    return 0;
}

{% include custom/custom-post-content-footer.md %}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on