Skip to content

Commit 47aacdd

Browse files
committed
Commit Message
1 parent 919dfd0 commit 47aacdd

File tree

34 files changed

+366
-212
lines changed

34 files changed

+366
-212
lines changed

exercises/00_hello_world/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66

77
int main(int argc, char **argv) {
88
// TODO: 在控制台输出 "Hello, InfiniTensor!" 并换行
9-
std::cout : "Hello, InfiniTensor!" + std::endl;
9+
std::cout << "Hello, InfiniTensor!" << std::endl;
1010
return 0;
11-
}
11+
}

exercises/01_variable&add/main.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
#include "../exercise.h"
22

3-
// READ: 运算符 <https://zh.cppreference.com/w/cpp/language/expressions#.E8.BF.90.E7.AE.97.E7.AC.A6>
3+
// READ: std streams <https://zh.cppreference.com/w/cpp/io/c/std_streams>
4+
// READ: 流修饰符 <https://zh.cppreference.com/w/cpp/io/manip>
5+
// READ: format in cxx20 <https://zh.cppreference.com/w/cpp/utility/format/format>
46

57
int main(int argc, char **argv) {
6-
// TODO: 补全变量定义并打印加法运算
7-
// x ?
8-
std::cout << x << " + " << x << " = " << x + x << std::endl;
8+
// TODO: 在控制台输出 "Hello, InfiniTensor!" 并换行
9+
std::cout << "Hello, InfiniTensor!" << std::endl;
910
return 0;
1011
}

exercises/02_function/main.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// NOTICE: 补充由内而外读法的机翻解释 <https://learn.microsoft.com/zh-cn/cpp/c-language/interpreting-more-complex-declarators?view=msvc-170>
66

77
// TODO: 在这里声明函数
8+
int add(int a, int b); // 声明函数原型
89

910
int main(int argc, char **argv) {
1011
ASSERT(add(123, 456) == 123 + 456, "add(123, 456) should be 123 + 456");
@@ -15,5 +16,5 @@ int main(int argc, char **argv) {
1516
}
1617

1718
int add(int a, int b) {
18-
// TODO: 补全函数定义,但不要移动代码行
19+
return a + b; // 补全函数定义
1920
}

exercises/03_argument&parameter/main.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ void func(int);
88
// TODO: 为下列 ASSERT 填写正确的值
99
int main(int argc, char **argv) {
1010
auto arg = 99;
11-
ASSERT(arg == ?, "arg should be ?");
11+
ASSERT(arg == 99, "arg should be 99");
1212
std::cout << "befor func call: " << arg << std::endl;
1313
func(arg);
14-
ASSERT(arg == ?, "arg should be ?");
14+
ASSERT(arg == 99, "arg should be 99");
1515
std::cout << "after func call: " << arg << std::endl;
1616
return 0;
1717
}
1818

1919
// TODO: 为下列 ASSERT 填写正确的值
2020
void func(int param) {
21-
ASSERT(param == ?, "param should be ?");
21+
ASSERT(param == 99, "param should be 99");
2222
std::cout << "befor add: " << param << std::endl;
2323
param += 1;
24-
ASSERT(param == ?, "param should be ?");
24+
ASSERT(param == 100, "param should be 100");
2525
std::cout << "after add: " << param << std::endl;
2626
}

exercises/04_static/main.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ static int func(int param) {
1010

1111
int main(int argc, char **argv) {
1212
// TODO: 将下列 `?` 替换为正确的数字
13-
ASSERT(func(5) == ?, "static variable value incorrect");
14-
ASSERT(func(4) == ?, "static variable value incorrect");
15-
ASSERT(func(3) == ?, "static variable value incorrect");
16-
ASSERT(func(2) == ?, "static variable value incorrect");
17-
ASSERT(func(1) == ?, "static variable value incorrect");
13+
ASSERT(func(5) == 5, "static variable value incorrect");
14+
ASSERT(func(4) == 6, "static variable value incorrect");
15+
ASSERT(func(3) == 7, "static variable value incorrect");
16+
ASSERT(func(2) == 8, "static variable value incorrect");
17+
ASSERT(func(1) == 9, "static variable value incorrect");
1818
return 0;
1919
}
20+

exercises/05_constexpr/main.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
#include "../exercise.h"
22

33
constexpr unsigned long long fibonacci(int i) {
4-
switch (i) {
5-
case 0:
6-
return 0;
7-
case 1:
8-
return 1;
9-
default:
10-
return fibonacci(i - 1) + fibonacci(i - 2);
4+
if (i <= 0) return 0;
5+
if (i == 1) return 1;
6+
7+
unsigned long long a = 0;
8+
unsigned long long b = 1;
9+
for (int k = 2; k <= i; ++k) {
10+
unsigned long long c = a + b;
11+
a = b;
12+
b = c;
1113
}
14+
return b;
1215
}
1316

1417
int main(int argc, char **argv) {
@@ -19,7 +22,7 @@ int main(int argc, char **argv) {
1922
// TODO: 观察错误信息,修改一处,使代码编译运行
2023
// PS: 编译运行,但是不一定能算出结果……
2124
constexpr auto ANS_N = 90;
22-
constexpr auto ANS = fibonacci(ANS_N);
25+
const auto ANS = fibonacci(ANS_N);
2326
std::cout << "fibonacci(" << ANS_N << ") = " << ANS << std::endl;
2427

2528
return 0;

exercises/06_array/main.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,13 @@ unsigned long long fibonacci(int i) {
1010
case 1:
1111
return 1;
1212
default:
13-
// TODO: 补全三目表达式缺失的部分
14-
return <condition> ? <cache> : (arr[i] = fibonacci(i - 1) + fibonacci(i - 2));
13+
return arr[i] != 0 ? arr[i] : (arr[i] = fibonacci(i - 1) + fibonacci(i - 2));
1514
}
1615
}
1716

1817
int main(int argc, char **argv) {
1918
// TODO: 为此 ASSERT 填写正确的值
20-
ASSERT(sizeof(arr) == ?, "sizeof array is size of all its elements");
19+
ASSERT(sizeof(arr) == sizeof(unsigned long long) * 90, "sizeof array is size of all its elements");
2120
// ---- 不要修改以下代码 ----
2221
ASSERT(fibonacci(2) == 1, "fibonacci(2) should be 1");
2322
ASSERT(fibonacci(20) == 6765, "fibonacci(20) should be 6765");

exercises/07_loop/main.cpp

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
11
#include "../exercise.h"
22

3-
// TODO: 改正函数实现,实现正确的缓存优化斐波那契计算
4-
// THINk: 这个函数是一个纯函数(pure function)吗?
5-
// READ: 纯函数 <https://zh.wikipedia.org/wiki/%E7%BA%AF%E5%87%BD%E6%95%B0>
6-
static unsigned long long fibonacci(int i) {
7-
// TODO: 为缓存设置正确的初始值
8-
static unsigned long long cache[96], cached;
9-
// TODO: 设置正确的循环条件
10-
for (; false; ++cached) {
11-
cache[cached] = cache[cached - 1] + cache[cached - 2];
3+
// READ: 数组 <https://zh.cppreference.com/w/cpp/language/array>
4+
5+
unsigned long long arr[90]{0, 1};
6+
unsigned long long fibonacci(int i) {
7+
switch (i) {
8+
case 0:
9+
return 0;
10+
case 1:
11+
return 1;
12+
default:
13+
return arr[i] != 0 ? arr[i] : (arr[i] = fibonacci(i - 1) + fibonacci(i - 2));
1214
}
13-
return cache[i];
1415
}
1516

16-
// ---- 不要修改以下代码 ----
1717
int main(int argc, char **argv) {
18-
ASSERT(fibonacci(0) == 0, "fibonacci(0) should be 0");
19-
ASSERT(fibonacci(1) == 1, "fibonacci(1) should be 1");
18+
// TODO: 为此 ASSERT 填写正确的值
19+
ASSERT(sizeof(arr) == sizeof(unsigned long long) * 90, "sizeof array is size of all its elements");
20+
// ---- 不要修改以下代码 ----
2021
ASSERT(fibonacci(2) == 1, "fibonacci(2) should be 1");
21-
ASSERT(fibonacci(3) == 2, "fibonacci(3) should be 2");
22-
ASSERT(fibonacci(10) == 55, "fibonacci(10) should be 55");
23-
24-
auto fib90 = fibonacci(90);
25-
std::cout << "fibonacci(90) = " << fib90 << std::endl;
26-
ASSERT(fib90 == 2880067194370816120, "fibonacci(90) should be 2880067194370816120");
22+
ASSERT(fibonacci(20) == 6765, "fibonacci(20) should be 6765");
23+
ASSERT(fibonacci(80) == 23416728348467685, "fibonacci(80) should be 23416728348467685");
2724
return 0;
2825
}

exercises/08_pointer/main.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
// READ: 数组向指针退化 <https://zh.cppreference.com/w/cpp/language/array#%E6%95%B0%E7%BB%84%E5%88%B0%E6%8C%87%E9%92%88%E7%9A%84%E9%80%80%E5%8C%96>
44
bool is_fibonacci(int *ptr, int len, int stride) {
55
ASSERT(len >= 3, "`len` should be at least 3");
6-
// TODO: 编写代码判断从 ptr 开始,每 stride 个元素取 1 个元素,组成长度为 n 的数列是否满足
7-
// arr[i + 2] = arr[i] + arr[i + 1]
6+
for (int i = 0; i + 2 * stride < len * stride; i += stride) {
7+
if (ptr[i + 2 * stride] != ptr[i] + ptr[i + stride]) {
8+
return false;
9+
}
10+
}
811
return true;
912
}
1013

exercises/09_enum&union/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ ColorEnum convert_by_pun(Color c) {
3636
};
3737

3838
TypePun pun;
39-
// TODO: 补全类型双关转换
39+
pun.c = c; // 将作用域枚举型赋值给联合体成员
4040

4141
return pun.e;
4242
}

0 commit comments

Comments
 (0)