Tossaporn Saengja

CPP Syntax for Competitive Programming

อ้างอิงจาก C++ Language Tutorial และประสบการณ์ส่วนตัว

Bare Minimum

Code Template

#include <bits/stdc++.h>

using namespace std;

int main() {
  return 0;
}

Comments

// line comment 

/*
block 
comment
*/

Variables Data Types

ในภาษา C++ จำเป็นจะต้องประกาศ “ชนิด” ของตัวแปรเสมอ (ต่างจาก Python)

ชนิดที่พบบ่อยคือ

ชนิด Size (byte)*
bool 1 ค่าความจริง true, false (0-1)
char 2 ตัวอักษร
int 4 จำนวนเต็ม
long long 8 จำนวนเต็มเหมือนกัน แต่เก็บค่าได้มากกว่า
float 4 จำนวนจริง
double 8 จำนวนจริงเหมือนกัน แต่เก็บค่าได้มากกว่า

สาเหตุที่มีชนิดเดียวกันที่เก็บค่าได้แตกต่างกันเพราะการจองพื้นที่ memory ขนาดไม่เท่ากัน

Input/Output

ใช้ cin ในการรับค่า โดยที่ cin จะดูชนิดของตัวแปรให้ตอนที่รับค่า

#include <bits/stdc++.h>

using namespace std;

int main() {
  int a;
  cin >> a;
  return 0;
}

หากพิมพ์ 5 หลังจากรันโปรแกรมแล้ว a จะมีค่าเท่ากับ 5 ที่เป็น integer

ถ้า

#include <bits/stdc++.h>

using namespace std;

int main() {
  char a;
  cin >> a;
  return 0;
}

แล้วพิมพ์ 5 หลังจากรันโปรแกรมแล้ว a จะมีค่าเท่ากับ ‘5’ ที่เป็น character

ตัวอย่างเช่น

#include <bits/stdc++.h>

using namespace std;

int main() {
  char a;
  int b;
  cin >> a >> b;
  int c = a;
  cout << c << " " << b;
  return 0;
}

แล้วพิมพ์ 5 5 จะได้ผลลัพธ์เป็น 53 5 เนื่องจาก character ‘5’ มีค่า ascii เป็น 53 (ถูกแปลงค่า)

'\n' เป็น special character ที่ใช้สำหรับขึ้นบรรทัดใหม่ในการแสดงผล

เช่น

#include <bits/stdc++.h>

using namespace std;

int main() {
  char a;
  int b;
  cin >> a >> b;
  int c = a;
  cout << c << "\n" << b;
  return 0;
}

แล้วพิมพ์ 5 5 จะได้ผลลัพธ์เป็น

53 
5

สังเกตว่า cout ต้องใช้เป็นท่อน ๆ คือส่ง << ได้ทีละตัวแปรหรือทีละ string เท่านั้น

เช่นเดียวกัน cin ที่ใช้เป็นท่อน ๆ คือรับ >> เข้าทีละตัวแปร โดยตัด input ตามประเภทตัวแปร

Control Structures

condition

if (x > 0)
  cout << "x is positive";
else if (x < 0)
  cout << "x is negative";
else
  cout << "x is 0";

loop

int i = 0;
while (i < 10) {
  cout << i << " ";
  i++;
} 
for (int i = 0; i < 10; i++) {
  cout << i << " ";
} 

Arrays

ใน C++ นั้นตัวแปรทุกชนิดสามารถทำเป็นตัวแปรชุด (Array) ได้ด้วยการใส่วงเล็บ [] ด้านหลังชื่อตัวแปร เช่น

จาก int a เป็นการประกาศตัวแปรที่เป็นจำนวนเต็มหนึ่งจำนวน

สามารถเป็น int a[10] เป็นการประกาศตัวแปรที่เป็นจำนวนเต็ม 10 จำนวน โดยจะเรียกสมาชิกได้ เช่น

a[0] เป็นการเรียกสมาชิกตัวแรกใน array นั้น

#include <bits/stdc++.h>

using namespace std;

int main() {
  int n;
  int a[20];
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  return 0;
}

ตัวอย่างด้านบนจะเป็นการรับค่า n เพื่อที่จะรับจำนวนเต็มต่ออีก nn จำนวน (ใช้ต่อในเงื่อนไขของ for loop)

จากนั้นรับค่าเข้าสู่ a[i] ไปเรื่อย ๆ โดย i={0,1,,n}i=\{0,1,\cdots,n\}

#include <bits/stdc++.h>

using namespace std;

int main() {
  int n;
  int a[20];
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  int sm = 0;
  for (int i = 0; i < n; i++) {
    sm += a[i];
  }
  cout << sm;
  return 0;
}

ตัวอย่างด้านบนเป็นการนำค่าที่รับเข้ามาไปใช้หาผลรวมต่อในตัวแปร sm

Strings

ใน C++ มี string ให้ใช้ใน STL ซึ่งถูกรวมอยู่ใน bits/stdc++.h แล้ว

จากที่ภาษา C ธรรมดาจะต้องใช้เป็น array of characters จึงสะดวกขึ้นเยอะ

#include <bits/stdc++.h>

using namespace std;

int main() {
  string a;
  cin >> a;
  cout << a;
  return 0;
}

ตัวอย่างด้านบนเป็นการรับค่า string แล้วส่งออกเลย

Functions

#include <bits/stdc++.h>

using namespace std;

int addint(int a, int b) {
  return a + b;
}

int main() {
  cout << addint(1, 4);
  return 0;
}

ตัวอย่างด้านบนเป็นการสร้างฟังก์ชัน f(a,b)=a+bf(a, b) = a+b โดยให้ชื่อว่า addint พร้อมตัวอย่างการเรียกใช้

Array หลายมิติ

#include <bits/stdc++.h>

using namespace std;

int main() {
  int a[5][5];
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> a[i][j];
    }
  }
  return 0;
}