Skip to content

Commit 4f6d343

Browse files
committed
Merge branch 'main' of github.com:Mdr-C-Tutorial/C
2 parents a300c97 + 34d2db0 commit 4f6d343

File tree

13 files changed

+164
-162
lines changed

13 files changed

+164
-162
lines changed

code/测试数据/语法和标准库/107/10701/generate_test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ def factorial(n):
1818
return ''.join(map(str, result[::-1]))
1919

2020
test_cases = [
21-
random.randint(1, 20), # 组1:1-20
21+
random.randint(1, 20), # 组 1:1-20
2222
random.randint(5, 20),
2323
random.randint(10, 20),
24-
random.randint(21, 50), # 组2:21-100
24+
random.randint(21, 50), # 组 2:21-100
2525
random.randint(40, 80),
2626
random.randint(60, 100),
2727
random.randint(80, 100),
28-
random.randint(101, 300), # 组3:101-1000
28+
random.randint(101, 300), # 组 3:101-1000
2929
random.randint(300, 700),
3030
random.randint(700, 1000)
3131
]

code/测试数据/语法和标准库/107/10702/generate_test.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def generate_orthogonal_vectors(n):
88
v1 = np.random.randn(n)
99
v1 = v1 / np.linalg.norm(v1)
1010

11-
# 生成一个随机向量并使其与v1正交
11+
# 生成一个随机向量并使其与 v1 正交
1212
v2 = np.random.randn(n)
1313
v2 = v2 - np.dot(v2, v1) * v1
1414
v2 = v2 / np.linalg.norm(v2)
@@ -25,7 +25,7 @@ def generate_vectors_with_angle(n, angle_degrees):
2525
v2_base = v2_base - np.dot(v2_base, v1) * v1
2626
v2_base = v2_base / np.linalg.norm(v2_base)
2727

28-
# 根据指定角度旋转v2
28+
# 根据指定角度旋转 v2
2929
angle_rad = math.radians(angle_degrees)
3030
v2 = v1 * math.cos(angle_rad) + v2_base * math.sin(angle_rad)
3131

@@ -51,18 +51,18 @@ def format_vector(v):
5151
base_dir = 'd:\\Projects\\C\\code\\测试数据\\数据结构与算法\\107\\10702'
5252
os.makedirs(base_dir, exist_ok=True)
5353

54-
# 生成20组测试数据(10组原始数据 + 10组新的随机数据
54+
# 生成 20 组测试数据(10 组原始数据 + 10 组新的随机数据
5555
test_cases = [
56-
(2, 90), # 2维正交向量
57-
(3, 0), # 3维相同向量
58-
(4, 180), # 4维相反向量
59-
(5, 90), # 5维正交向量
60-
(10, 14.42), # 10维特定角度
61-
(20, 90), # 20维正交向量
62-
(50, 90), # 50维正交向量
63-
(100, 180), # 100维相反向量
64-
(3, 90), # 3维正交向量(带小数)
65-
(4, 19.47), # 4维特定角度
56+
(2, 90), # 2 维正交向量
57+
(3, 0), # 3 维相同向量
58+
(4, 180), # 4 维相反向量
59+
(5, 90), # 5 维正交向量
60+
(10, 14.42), # 10 维特定角度
61+
(20, 90), # 20 维正交向量
62+
(50, 90), # 50 维正交向量
63+
(100, 180), # 100 维相反向量
64+
(3, 90), # 3 维正交向量(带小数)
65+
(4, 19.47), # 4 维特定角度
6666
(20, None), # 随机向量对
6767
(30, None), # 随机向量对
6868
(40, None), # 随机向量对

docs/教程/正文/数据结构与算法/算法/3_算法的时间和空间复杂度.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
可以更快速地用极限定义:
2828

2929
1. $$f(n) \in \Theta(g(n)) \Leftrightarrow \lim_{n \to \infty} \frac{f(n)}{g(n)}=C$$
30-
2. $$f(n) \in O(g(n)) \Leftrightarrow \lim_{n \to \infty} \frac{f(n)}{g(n)}=0\space或\space C$$
31-
3. $$f(n) \in \Omega(g(n)) \Leftrightarrow \lim_{n \to \infty} \frac{f(n)}{g(n)}=\infty\space或\space C$$
30+
2. $$f(n) \in O(g(n)) \Leftrightarrow \lim_{n \to \infty} \frac{f(n)}{g(n)}=0\space 或\space C$$
31+
3. $$f(n) \in \Omega(g(n)) \Leftrightarrow \lim_{n \to \infty} \frac{f(n)}{g(n)}=\infty\space 或\space C$$
3232
4. $$f(n) \in o(g(n)) \Leftrightarrow \lim_{n \to \infty} \frac{f(n)}{g(n)}=0$$
3333
5. $$f(n) \in \omega(g(n)) \Leftrightarrow \lim_{n \to \infty} \frac{f(n)}{g(n)}=\infty$$
3434

docs/教程/正文/语法和标准库/1_在开始编程之前.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ Code is cheap, show me the proof.
6363
```txt
6464
Talk is not cheap.
6565
```
66+
6667
### 2.7 理解语言的能力
68+
6769
1. 编程语言是人写的,也是给人看的,编程语言当中有自然语言的影子
6870
2. 把你的代码写得更像自然语言,就能自然地契合“如无必要,勿添注释”的思想
6971
3. 函数名比较抽象,但是绝不是毫无意义,了解一下函数名的词源,有助于记忆函数的功能和在正确的使用场景想起来它

docs/教程/题解/语法和标准库/20241215_1_4.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@
2424

2525
void multiply(int digits[], int n, int* len) {
2626
int carry = 0;
27-
27+
2828
for(int i = 0; i < *len; i++) {
2929
int prod = digits[i] * n + carry;
3030
digits[i] = prod % 10;
3131
carry = prod / 10;
3232
}
33-
33+
3434
while(carry) {
3535
digits[*len] = carry % 10;
3636
carry /= 10;
@@ -41,19 +41,19 @@ void multiply(int digits[], int n, int* len) {
4141
int main(void) {
4242
int digits[MAX_DIGITS] = {1}; // 初始值为 1
4343
int len = 1;
44-
44+
4545
// 计算阶乘
4646
for(int i = 2; i <= 50; i++) {
4747
multiply(digits, i, &len);
4848
}
49-
49+
5050
// 倒序输出结果
5151
printf("50! = ");
5252
for(int i = len - 1; i >= 0; i--) {
5353
printf("%d", digits[i]);
5454
}
5555
printf("\n");
56-
56+
5757
return 0;
5858
}
5959
```
Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,45 @@
11
# 20241215_1_4_oj
22

3-
## 1. 大数阶乘(OJ版
3+
## 1. 大数阶乘(OJ 版
44

55
### 题目描述
66

7-
给定一个正整数n,计算并输出n的阶乘(n!)的值。
7+
给定一个正整数 n,计算并输出 n 的阶乘(n!)的值。
88

99
### 输入格式
1010

11-
输入一个正整数n(1 ≤ n ≤ 1000)。
11+
输入一个正整数 n(1 ≤ n ≤ 1000)。
1212

1313
### 输出格式
1414

15-
输出一行,为n!的准确值,不要有多余的前导0
15+
输出一行,为 n! 的准确值,不要有多余的前导 0
1616

1717
### 样例输入
1818

19-
``` in
19+
```in
2020
5
2121
```
2222

2323
### 样例输出
2424

25-
``` out
25+
```out
2626
120
2727
```
2828

2929
### 数据范围
3030

31-
测试点按照n的大小分为三组
31+
测试点按照 n 的大小分为三组
3232

33-
- 第1-3点:1 ≤ n ≤ 20
34-
- 第4-7点:21 ≤ n ≤ 100
35-
- 第8-10点:101 ≤ n ≤ 1000
33+
- 第 1-3 点:1 ≤ n ≤ 20
34+
- 第 4-7 点:21 ≤ n ≤ 100
35+
- 第 8-10 点:101 ≤ n ≤ 1000
3636

3737
### 解析
3838

39-
由于n!可能非常大(1000!约有2568位),需要用数组存储每一位。计算过程中:
39+
由于 n! 可能非常大(1000! 约有 2568 位),需要用数组存储每一位。计算过程中:
4040

4141
1. 用数组存储结果的每一位
42-
2. 从1乘到n,每次乘法都需要处理进位
42+
2. 从 1 乘到 n,每次乘法都需要处理进位
4343
3. 最后倒序输出数组即为结果
4444

4545
### 答案
@@ -51,13 +51,13 @@
5151

5252
void multiply(int digits[], int n, int* len) {
5353
int carry = 0;
54-
54+
5555
for(int i = 0; i < *len; i++) {
5656
int prod = digits[i] * n + carry;
5757
digits[i] = prod % 10;
5858
carry = prod / 10;
5959
}
60-
60+
6161
while(carry) {
6262
digits[*len] = carry % 10;
6363
carry /= 10;
@@ -68,21 +68,21 @@ void multiply(int digits[], int n, int* len) {
6868
int main(void) {
6969
int n;
7070
scanf("%d", &n);
71-
71+
7272
int digits[MAX_DIGITS] = {1}; // 初始值为 1
7373
int len = 1;
74-
74+
7575
// 计算阶乘
7676
for(int i = 2; i <= n; i++) {
7777
multiply(digits, i, &len);
7878
}
79-
79+
8080
// 倒序输出结果
8181
for(int i = len - 1; i >= 0; i--) {
8282
printf("%d", digits[i]);
8383
}
8484
printf("\n");
85-
85+
8686
return 0;
8787
}
8888
```

docs/教程/题解/语法和标准库/oj_10702_vec.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,35 +39,35 @@ double vector_length(const double v[], int n) {
3939
int main(void) {
4040
int n;
4141
double v1[MAX_DIM], v2[MAX_DIM];
42-
42+
4343
scanf("%d", &n);
44-
44+
4545
if (n < 2 || n > MAX_DIM) {
4646
return 1;
4747
}
48-
48+
4949
for (int i = 0; i < n; i++) {
5050
scanf("%lf", &v1[i]);
5151
}
52-
52+
5353
for (int i = 0; i < n; i++) {
5454
scanf("%lf", &v2[i]);
5555
}
56-
56+
5757
if (is_zero_vector(v1, n) || is_zero_vector(v2, n)) {
5858
return 1;
5959
}
60-
61-
double cos_theta = dot_product(v1, v2, n) /
60+
61+
double cos_theta = dot_product(v1, v2, n) /
6262
(vector_length(v1, n) * vector_length(v2, n));
63-
63+
6464
if (cos_theta > 1) cos_theta = 1;
6565
if (cos_theta < -1) cos_theta = -1;
66-
66+
6767
double angle = acos(cos_theta) * 180.0 / M_PI;
68-
68+
6969
printf("%.2f\n", angle);
70-
70+
7171
return 0;
7272
}
7373
```
@@ -154,4 +154,4 @@ int main(void) {
154154
0.5 0.5 0.5 0.5
155155
输出:
156156
19.47
157-
```
157+
```

docs/教程/题解/语法和标准库/unk_pi01.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ int main(void) {
2525
int M;
2626
printf("输入投掷次数:");
2727
scanf("%d", &M);
28-
28+
2929
srand(time(NULL));
3030
int in_circle = 0;
31-
31+
3232
for(int i = 0; i < M; i++) {
3333
// 使用 -1 到 1 的范围以充分利用圆形区域
3434
double x = 2.0 * rand() / RAND_MAX - 1.0;
@@ -37,7 +37,7 @@ int main(void) {
3737
in_circle++;
3838
}
3939
}
40-
40+
4141
double pi = 4.0 * in_circle / M;
4242
printf("π ≈ %.6f\n", pi);
4343
return 0;

docs/教程/题解/语法和标准库/unk_pi02.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,24 +38,24 @@ int main(void) {
3838
int M;
3939
printf("输入投掷次数:");
4040
scanf("%d", &M);
41-
41+
4242
srand(time(NULL));
4343
int cross = 0;
4444
const double d = 1.0; // 线间距
4545
const double l = 1.0; // 针长
46-
46+
4747
for(int i = 0; i < M; i++) {
48-
// y是针中点到最近线的距离
48+
// y 是针中点到最近线的距离
4949
double y = (double)rand() / RAND_MAX * (d/2);
50-
// theta是针与线的夹角
50+
// theta 是针与线的夹角
5151
double theta = (double)rand() / RAND_MAX * M_PI;
52-
52+
5353
// 判断是否相交
5454
if(y <= (l/2) * sin(theta)) {
5555
cross++;
5656
}
5757
}
58-
58+
5959
double pi = 2.0 * M / cross;
6060
printf("π ≈ %.6f\n", pi);
6161
return 0;

docs/教程/题解/语法和标准库/unk_vec.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,51 +39,51 @@ int main(void) {
3939
int n;
4040
printf("请输入向量维数:");
4141
scanf("%d", &n);
42-
42+
4343
if (n <= 0) {
4444
printf("错误:维数必须为正整数\n");
4545
return 1;
4646
}
47-
47+
4848
double* v1 = malloc(n * sizeof(double));
4949
double* v2 = malloc(n * sizeof(double));
50-
50+
5151
if (!v1 || !v2) {
5252
printf("错误:内存分配失败\n");
5353
free(v1);
5454
free(v2);
5555
return 1;
5656
}
57-
57+
5858
printf("请输入第一个向量的坐标:\n");
5959
for (int i = 0; i < n; i++) {
6060
scanf("%lf", &v1[i]);
6161
}
62-
62+
6363
printf("请输入第二个向量的坐标:\n");
6464
for (int i = 0; i < n; i++) {
6565
scanf("%lf", &v2[i]);
6666
}
67-
67+
6868
// 检查零向量
6969
if (is_zero_vector(v1, n) || is_zero_vector(v2, n)) {
7070
printf("错误:零向量没有方向,无法计算夹角\n");
7171
free(v1);
7272
free(v2);
7373
return 1;
7474
}
75-
76-
double cos_theta = dot_product(v1, v2, n) /
75+
76+
double cos_theta = dot_product(v1, v2, n) /
7777
(vector_length(v1, n) * vector_length(v2, n));
78-
78+
7979
// 处理数值误差导致的 cos_theta > 1 或 cos_theta < -1 的情况
8080
if (cos_theta > 1) cos_theta = 1;
8181
if (cos_theta < -1) cos_theta = -1;
82-
82+
8383
double angle = acos(cos_theta) * 180.0 / M_PI;
84-
85-
printf("两向量的夹角为:%.2f度\n", angle);
86-
84+
85+
printf("两向量的夹角为:%.2f 度\n", angle);
86+
8787
free(v1);
8888
free(v2);
8989
return 0;

0 commit comments

Comments
 (0)