问题 I: 深入浅出学算法041-数的计数
时间: 2023-05-24 07:06:05 浏览: 133
问题 I: 深入浅出学算法041-数的计数
本课将介绍数的计数,包括如何列举一定范围内的整数、如何计算一组数字的和及平均值。
1. 列举整数
要列举一个范围内的整数,可以使用 for 循环。
例如,要列举 1 到 10 的整数,可以使用以下代码:
```
for i in range(1, 11):
print(i)
```
输出结果为:
```
1
2
3
4
5
6
7
8
9
10
```
2. 计算一组数字的和及平均值
要计算一组数字的和及平均值,可以使用 for 循环和累加变量。
例如,要计算数字列表 [1, 2, 3, 4, 5] 的和及平均值,可以使用以下代码:
```
num_list = [1, 2, 3, 4, 5]
sum_num = 0
for num in num_list:
sum_num += num
average_num = sum_num / len(num_list)
print('Sum:', sum_num)
print('Average:', average_num)
```
输出结果为:
```
Sum: 15
Average: 3.0
```
以上就是数的计数的基本介绍,希望能对你有所帮助。
相关问题
问题 A: 深入浅出学算法043-排队打水
题目描述
有 $n$ 个人要排队去打水,每个人需要一定的时间 $t_i$ 才能打完水离开。他们按照到达的时间先后排成一列,从前往后依次编号为 $1,2,\cdots,n$。一开始队伍为空。每个人依次进入队伍,如果队伍中有人正在打水,那么这个人就必须站在队伍的末尾等待。每个人打完水后会离开队伍,问每个人离开队伍的时间。
输入格式
第一行一个整数 $n$。
第二行 $n$ 个整数 $t_1,t_2,\cdots,t_n$,表示每个人打水所需的时间。
输出格式
输出 $n$ 行,第 $i$ 行表示第 $i$ 个人离开队伍的时间。
数据范围
$1\leq n\leq 1000,1\leq t_i\leq 1000$
输入样例
5
3 6 2 4 3
输出样例
3
9
11
15
18
算法1
(模拟+队列) $O(n)$
模拟整个排队打水的过程。用一个队列 $q$ 来维护当前队伍中等待的人,每当有一个人进入队伍时,先计算出他的离开时间 $t$,然后将他加入队尾。如果队伍中有人正在打水,那么这个人就必须在队伍中等待,所以 $t$ 的计算需要加上队伍中最后一个人的离开时间。
C++ 代码
算法2
(排序+贪心) $O(nlogn)$
对每个人按照到达时间排序,然后依次计算他们的离开时间。用一个变量 $cur$ 来维护当前队伍中最后一个打完水的人的离开时间,每当有一个人进入队伍时,如果他到达的时间比 $cur$ 大,则他可以直接打水离开队伍。否则他必须等待,等待的时间就是 $cur-t_i$,然后再计算他的离开时间。
C++ 代码
深入浅出学算法101-N皇后问题
N 皇后问题是一个经典的算法问题,它的目标是在 $N \times N$ 的棋盘上放置 $N$ 个皇后,使得它们互相之间不能攻击到对方。皇后可以攻击同一行、同一列或同一对角线上的其他皇后。
解决这个问题的常用方法是回溯算法。回溯算法是一种深度优先搜索的算法,它通常用于解决组合问题。在回溯算法中,我们尝试每一种可能的情况,如果当前情况不满足条件,就回溯到上一个状态并尝试下一种情况,直到找到满足条件的解或者所有情况都尝试完毕。
下面是 N 皇后问题的回溯算法实现:
```python
def solveNQueens(n: int) -> List[List[str]]:
def backtrack(board, row):
if row == n:
res.append(["".join(row) for row in board])
return
for col in range(n):
if not cols[col] and not diag1[row + col] and not diag2[row - col]:
board[row][col] = "Q"
cols[col], diag1[row + col], diag2[row - col] = True, True, True
backtrack(board, row + 1)
board[row][col] = "."
cols[col], diag1[row + col], diag2[row - col] = False, False, False
res = []
board = [["."] * n for _ in range(n)]
cols, diag1, diag2 = [False] * n, [False] * (2 * n - 1), [False] * (2 * n - 1)
backtrack(board, 0)
return res
```
在回溯算法中,我们首先初始化一个 $N \times N$ 的棋盘,然后从第一行开始尝试每一列上放置皇后的情况。如果当前位置可以放置皇后,就递归到下一行继续尝试放置皇后,否则回溯到上一行并尝试下一列。当所有皇后都放置完毕时,我们将当前棋盘的状态加入结果集中。
在实现中,我们使用了三个数组来记录哪些列、哪些对角线已经有皇后了,以便在放置皇后时进行判断。其中,cols 数组记录哪些列已经有皇后,diag1 数组记录从左上角到右下角的对角线上哪些位置已经有皇后,diag2 数组记录从右上角到左下角的对角线上哪些位置已经有皇后。
以上就是 N 皇后问题的解决方法,希望能够帮助你深入浅出地理解算法的实现过程。