cách update level ngôn ngữ lập trình java và các ngôn ngữ khác
Chào em! Rất vui vì em đang chủ động tìm cách cải thiện kỹ năng lập trình. Việc sử dụng lưu đồ (flowchart) trước khi code là một phương pháp hay để hình dung logic chương trình. Dưới đây là một số gợi ý giúp em củng cố tư duy logic:
- Quy Trình Giải Quyết Bài Toán
- Bước 1: Hiểu rõ yêu cầu
Đọc kỹ đề bài, xác định input/output và các trường hợp đặc biệt (ví dụ: giá trị âm, rỗng, ngoại lệ). - Bước 2: Phân tích bằng lưu đồ
Vẽ sơ đồ các bước xử lý, rẽ nhánh (if/else), vòng lặp (for/while) để mô tả luồng chương trình. - Bước 3: Viết mã giả (Pseudocode)
Diễn giải từng bước trong lưu đồ thành câu lệnh đơn giản (không cần cú pháp ngôn ngữ cụ thể). - Bước 4: Code từng phần nhỏ
Chia bài toán lớn thành các hàm/chức năng nhỏ, code và kiểm tra từng phần.
- Thực Hành Hiệu Quả
- Bắt đầu từ bài toán đơn giản
Ví dụ: Tính tổng mảng, kiểm tra số nguyên tố → Tăng dần độ phức tạp (sắp xếp, tìm kiếm, xử lý chuỗi). - Tham gia các nền tảng luyện code
LeetCode, HackerRank, hoặc CodeSignal để giải bài tập theo cấp độ.
- Kỹ Thuật Hỗ Trợ
- Debug từng bước: Sử dụng công cụ debugger để theo dõi giá trị biến và luồng chương trình.
- Viết test case đơn giản: Tự tạo input để kiểm tra output mong muốn vs kết quả thực tế.
- Đọc code của người khác: Học cách tiếp cận từ các dự án mã nguồn mở trên GitHub.
Ví dụ Minh Họa
Bài toán: Kiểm tra một số có phải là số hoàn hảo (tổng các ước bằng chính nó).
-
Lưu đồ:
Bắt đầu → Nhập sốn→ Khởi tạosum = 0→ Lặpitừ1đếnn/2→ Nếun % i == 0thì cộngivàosum→ So sánhsum == n→ Kết luận → Kết thúc. -
Code (Python):
def is_perfect_number(n):
if n <= 0:
return False
total = 0
for i in range(1, n//2 + 1):
if n % i == 0:
total += i
return total == n
# Test
print(is_perfect_number(6)) # True (1+2+3=6)
Tài Nguyên Học Tập
- Sách: "Cracking the Coding Interview" (hướng dẫn giải bài toán logic).
- YouTube: Kênh "FreeCodeCamp" (bài giảng về thuật toán).
Hãy kiên nhẫn và đừng ngại mắc lỗi! Mỗi bug em fix được sẽ giúp em tiến bộ hơn. Nếu có đoạn code cụ thể cần góp ý, hãy chia sẻ nhé! 😊
Ý tưởng làm project cá nhân
Dạo này EA đang update lại các bản Plants vs Zombies, mình đang chơi game PvZ Heroes, tựa game thẻ bài theo lượt cũng khá hay. Bạn có thể làm thể loại đó trên PC hoặc web được không? 
Tìm ước trong python
Để tìm ước của số bất kỳ <= 10^7 thì có một cách đó là tìm các số nguyên tố nhỏ hơn 3163 (~ sqrt(10^7)), sau đó chia lần lượt để tách số ban đầu ra các thừa số nguyên tố.
ví dụ: 140 = 2.2.5.7
sau khi tìm được các số thì nhóm từng số ra sẽ tìm được các ước.
Ước của 140 là: 2, 5, 7, 4, 10, 14, 35, 20, 28, 70, 140.
Bitset có nhanh hơn mảng bool trong c++ không?
#include <time.h>
const int limit = 1e8 + 8;
long long p[limit / 64 + 11];
bool test(int idx) {
return (p[idx / 64] & (1ULL<<(idx % 63))) == 0;
}
void mark(int idx) {
p[idx / 64] |= (1ULL<<(idx % 63));
}
void sieve() {
mark(0);
mark(1);
for (int i = 3; i * i < limit; i += 2) {
if (test(i)) {
for (long long j = i * i; j < limit; j += i * 2) {
mark(j);
}
}
}
}
#define ri register int
void sieve2() {
ri pSize = limit / 64 + 11;
for(ri i=0; i<pSize; ++i) {
p[i] = 0;
}
register long long* pNum = p;
for (ri i = 3; i < limit; i+=2) {
if (*pNum & (1ULL << (i & 0xff)) == 0) {
for (ri j = i + i; j < limit; j += i) {
p[j >> 8] |= (1ULL<<(j & 0xff));
}
}
if(i & 0xff == 0) {
pNum++;
}
}
}
int main() {
clock_t start = clock();
sieve();
printf("%ld\n", clock() - start);
start = clock();
sieve2();
printf("%ld\n", clock() - start);
getchar();
return 0;
}
- Có thể tối ưu bằng cách sử dụng thanh ghi (register).
- Phép chia cho 64 có thể thay bằng dịch 8 bit sang phải.
- Chia lấy dư cho 64 có thể sử dụng phép và bit với 255 (
& 0xff). - Có thể loại các trường hợp số chia hết cho 2.
- Sử dụng
pNumđể duyệt từng phần tử của mảngp, tránh mỗi lần lại tìm lại phần tử theo chỉ số. - Còn việc tính đến sqrt(limit) thì mình không chắc có đúng không, vì nếu chỉ lấy đến sqrt(limit) thì khai báo limit ngay từ đầu được rồi, cần gì làm limit cho thừa.
Câu đố khó nhất thế giới ?
Đọc lời giải thì mấu chốt không phải cứu tất cả, mà là cứu 99 người phía trước, còn người thứ 100 sẽ chịu hy sinh để nhắc màu cho 99 người còn lại. Nhưng mà liệu có cách nào có thể cứu được tất cả 100 người không nhỉ?
cấu trúc dữ liệu
Tìm hiểu : cây nhị phân là gì? biểu thức trung tố là gì? -> cách biểu diễn biểu thức trung tố bằng cây nhị phân -> sử dụng để tính toán, biểu diễn lại biểu thức trung tố sang hậu tố và tiền tố.
giúp mik vs mai mik thi r
1 - Thiếu dấu đóng ngoặc tròn ở dòng đầu tiên
Binary file trong c++
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ofstream write("test.txt", ios::binary);
int a[] = {1, 2, 3, 4, 7, 10}, n;
write.write(reinterpret_cast<char*> (a), sizeof(a));
write.close();
ifstream read("test.txt");
while(!read.eof())
{
n = 88;
read.read(reinterpret_cast<char*> (&n), 4);
cout << n;
}
/*
while(read.read(reinterpret_cast<char*> (&n), 4))
{
cout << n;
}
if(read.eof())
{
cout << " end";
}
else
{
cout << " error";
}
*/
read.close();
return 0;
}
có vẻ read.eof() dùng để kiểm tra lỗi, nếu set n bằng 88 trước khi đọc thì sẽ thấy câu lệnh đọc cuối cùng không được thực hiện.
Nguồn:
Tổ chức
Chưa có tổ chức nào.