【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
题目分析
解题思路
- 首先需要输入向量维度n
- 输入第一个向量的n个分量并存入数组中
- 输入第二个向量的n个分量并存入数组中
- 遍历两个数组,计算对应位置的乘积并累加
- 输出最终的点积结果
复杂度分析:
- 输入两个向量的时间复杂度为 $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 进行授权