文章

【GESP】C++三级练习 luogu-B2091 向量点积计算

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

luogu-B2091 向量点积计算

题目要求

题目描述

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

给定两个 $n$ 维向量 $a=(a_1,a_2, \cdots ,a_n)$ 和 $b=(b_1,b_2, \cdots ,b_n)$,求点积 $a$ · $b=a_1b_1+a_2b_2+ \cdots +a_nb_n$。

输入格式

第一行是一个整数 $n$。$1 \le n \le 1000$。

第二行包含 $n$ 个整数 $a_1,a_2, \cdots ,a_n$。

第三行包含 $n$ 个整数 $b_1,b_2, \cdots ,b_n$。

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

输出格式

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

输入输出样例 #1

输入 #1

1
2
3
3
1 4 6
2 1 5

输出 #1

1
36

题目分析

解题思路

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

复杂度分析:

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


示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#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;
}

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

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

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

本文由作者按照 CC BY 4.0 进行授权