2024 建北電資聯合暑訓
Introductions
不然呢
C++ 具有控制底層硬體的能力,這導致他的執行效率很高
Windows
macOS
Chrome
遊戲開發
系統開發
開源專案
競賽程式
What we do
支線任務 | 團體賽讚 |
---|---|
YTP | 好吃 |
NPSC | 獎品讚 |
ISSC | 很傻逼 |
成大賽 | 絕對別報 |
11 人
10 人
4 人
金銀牌保送任意科系
20 人
12 人
前半保送資工
10 人
題目敘述簡單,主要為算法題目,題目質量好。
全球最大 Online Judge,時常有辦線上賽(類似排位賽)。但大多都在台灣的午夜時間。
由建北電資所架,然而教課這幾天因為北一伺服器停機所以我們鬼轉 codeforces去寫題目。
解題的地方
Result | Meaning | Why |
---|---|---|
AC | Accepted | 你對了 |
WA | Wrong Answer | 你錯了 |
MLE | Memory limit exceed | 你花太多記憶體 |
TLE | Time limit exceed | 執行時間太長 |
RE | Runtime error | 你可能戳出去了 |
可以找模板
就一本書,網路上找得到
反正歡迎各位來找我聊天、問問題
或者要打LOL也可以(我很菜)
Setups
編輯程式碼
輕量快速
自帶編譯器
安裝簡單
文字編輯器
整合式開發環境
Visual Studio Code
目前最多人使用的編輯器
擴充功能多 但安裝麻煩
Vi IMproved
上手成本超高
熟悉之後超好用
早學早上手
Windows 記事本
不要懷疑 這就是文字編輯器
至於什麼時候會用到
我也不知道
學校電腦上有
字體很醜
有時候 Windows Defender 會搞
很眼熟
VS Code 少了 Code
其實我沒用過這個
線上版 IDE
手機平板都可用
速度較慢
What we use
不想用的去用線上的
想來訂一些小規範
看顏色區分
這是完整可以直接執行的程式
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
}
int arr[3] = {8, 0, 7};
arr[0] = 4;
arr[2] = 4;
for (int i = 0, i < 3; i++) {
cout << arr[i];
}
這是程式片段,缺乏上下文,示例用
來講一下 Coding Style
就是一種寫 Code 的習慣&風格
#include <iostream>
using namespace std;
int main() {
int n = 5;
for (int i = 0; i < n; i++) {
cout << "Hello World" << endl;
}
}
字間空格
變數名稱
大括號不換行
ChatGPT 的 Coding Style 挺讚
同場加映:
There are two types of people in this world:
Those who don't put curly braces on a new line,
and those who are hated by the world.
– Bill Gates
沒有說過
我尊重各種 Coding Style 應該
我尊重各種 Coding Style 應該
旁邊那隻貓是來幫忙抓bug的可以忽略他
第一個程式
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
}
引入函式庫(功能庫)
使用命名空間
主函式
記得分號
#include <iostream>
using namespace std;
int main() {
cout << ... << endl;
}
/*-----------------------*/
// 這個是註解,不會被執行到
/* 這個是更大的註解
檢查:
.cpp 檔名
字沒拼錯
<< 方向正確
"字串要用雙引號"
分號;
大括號不要換行
*/
必要三件套:
Variables & Arrays
數值會改變的數
- 這是一個箱子,我們叫它Box
Box
- 這是一隻貓,我相信大家有目共睹
Cat
變數
一個具有名稱的儲存空間
一個可以改變的值
Cat
- 你可以把這隻貓放進箱子裡
Box
一隻不知道是死是活的貓
我們可以在變數裡面放各式各樣的東西
資料型態
名稱 | 型態(Type) | 大小 |
---|---|---|
int | 整數 | |
long long | 整數 | |
bool | 布林值 | 真假值 (true / false) |
char | 字元 | 一個字 |
string | 字串 | 多個字 |
float | 浮點數 | 小數點 |
宣告
資料型態
變數名稱
值
string box = "cat";
這是還沒組裝的紙箱
使用變數之前,我們需要創造它
Cat
放心,本課堂沒有任何貓咪受到傷害
這是剛剛那隻貓,他還活著
int a;
string box;
int a, b, c = 10;
// 注意只有c被設為10
a
grandma.rar
b
Milk
c
Protein
這裡有三個罐子,有奶粉 / 蛋白粉 / 阿罵的骨灰
cin & cout
int a = 0;
a = 3; // 不用重新宣告
int a;
cin >> a;
int a;
cin >> a;
cout << a + 10 << endl;
加減乘除
+ - * / %
int a = 5, b = 3;
cout << a + b << endl;
cout << a - b << endl;
cout << a * b << endl;
cout << a / b << endl;
cout << a % b << endl;
int a = 0;
a = a + 1;
cout << a << endl;
a += 1;
cout << a << endl;
a++;
cout << a << endl;
跟 = 結合
一堆變數們
我們叫它 arr
從零開始編號
0-based
1
2
3
0
int arr[4] = {3, 3, 5, 2};
cout << arr[2] << endl;
cout << arr[0] << endl;
arr[2] = 7;
cout << arr[2] << endl;
cout << arr[0] << endl;
於是我們寫出
3
3
5
2
好多箱子,裡面有一些數字
Coditionals
如果我們想要讓程式在不同條件做不同事情?
所以說晚餐要吃什麼
– cjtsai
建中電研一四學術
Source: Codedex
不知道有沒有說過
刀削小廚
麥當勞
if (條件) {
// do something
}
if (grade > 60) {
cout << "You passed!" << endl;
}
跳過大括號裡面
如果條件為 true
就做下面敘述的事
如果條件為 true
就做下面敘述的事
if (條件) {
// do something
} else {
// do something else
}
if (grade >= 60) {
cout << "You passed!" << endl;
} else {
cout << "You failed." << endl;
}
如果條件為 true
就做下面敘述的事
如果條件為 true
就做下面敘述的事
否則做 else 裡的
if (條件A) {
// do this
} else if (條件B) {
// do this, instead
} else {
// do this if none of the above are true
}
不只兩種情況怎麼辦
if (grade > 90) {
cout << 'A';
} else if (grade > 80) {
cout << 'B';
} else if (grade > 70) {
cout << 'C';
} else if (grade >= 60) {
cout << 'D';
} else {
cout << 'F';
}
Logical Operators
要怎麼判斷兩個東西是否相等?
判斷不等於呢?
if (a == b) {
cout << "they are the same";
} else {
cout << "they are different";
}
if (!(a == b)) {
cout << "they are different";
} else {
cout << "they are the same";
}
只需要在前面加個 !
OR
if (a != b) {
cout << "they are different";
} else {
cout << "they are the same";
}
如果想將多種條件結合判斷?
if (hunger > 4 && anger > 1) {
cout << "Hangry" << endl;
}
使用 && 和 ||
if (coffee > 0 || bubble_tea > 0) {
cout << ":)" << endl;
}
A | B | A && B | A || B |
---|---|---|---|
false | false | false | false |
false | true | false | true |
true | false | false | true |
true | true | true | true |
只要一個錯就算錯
(兩個都要對)
只要一個對就算對
(任一個對就好)
Loops
如果我想要輸出Hello World 3次
cout << "Hello World!" << endl;
cout << "Hello World!" << endl;
cout << "Hello World!" << endl;
如果是20次,甚至100次呢?
while (條件) {
// Code here
}
當條件為 true 時會一直執行
int luckyNumber = 7;
int guess;
cin >> guess;
while (guess != luckyNumber) {
cout << "Nope, it isn't " << guess << endl;
cin >> guess;
}
cout << "Lucky Number is " << luckyNumber;
可以來做個小遊戲
for (int i = 1; i <= 10; i++) {
cout << i << endl;
}
for (宣告變數; 條件; 更新變數) {
// Code here
}
稍微有點不太一樣
for (int i = 1; i <= 20; i++) {
cout << "Hello World!" << endl;
}
可以完成剛剛的心願了
也可以用一些酷方法去遍歷陣列
for (int i = 0; i < 5; i++) {
if (i == 3) {
continue;
}
cout << i << endl;
}
終止當前迴圈進入下個迴圈
for (int i = 0; i < 5; i++) {
if (i == 3) {
break;
}
cout << i << endl;
}
直接離開迴圈