50 JavaScript · 50 C#

Mỗi ngày một bài.
Giữ não luôn sắc.

Từ vòng lặp, chuỗi và mảng đến stack, đệ quy và dynamic programming cơ bản.

100/100 bài
JSDễ

001 · Tổng các chữ số

Cho một số nguyên, tính tổng các chữ số của giá trị tuyệt đối của số đó.

vòng lặp
JSDễ

002 · Kiểm tra số nguyên tố

Xác định một số nguyên dương có phải là số nguyên tố hay không.

vòng lặp
JSDễ

003 · Đếm bội số trong đoạn

Đếm có bao nhiêu số nguyên trong đoạn đóng từ a đến b chia hết cho k.

vòng lặp
JSDễ

004 · Vẽ tam giác sao

Tạo tam giác vuông gồm n dòng sao, dòng thứ i có i ký tự sao.

vòng lặp lồng nhau
JSDễ

005 · Tính lũy thừa bằng vòng lặp

Tính a mũ b với a là số nguyên và b là số nguyên không âm, không dùng hàm lũy thừa có sẵn.

vòng lặp
JSDễ

006 · Đảo ngược chuỗi

Đảo ngược thứ tự các ký tự trong một chuỗi, giữ nguyên khoảng trắng và chữ hoa.

chuỗi
JSDễ

007 · Chuẩn hóa khoảng trắng

Xóa khoảng trắng ở đầu và cuối, đồng thời thay mọi dãy khoảng trắng bên trong bằng một dấu cách.

chuỗi
JSDễ

008 · Đếm nguyên âm

Đếm số nguyên âm Latin a, e, i, o, u trong chuỗi, không phân biệt chữ hoa chữ thường.

chuỗi
JSDễ

009 · Kiểm tra palindrome

Kiểm tra chuỗi có đọc xuôi và ngược giống nhau sau khi bỏ ký tự không phải chữ cái hoặc chữ số và bỏ qua hoa thường.

chuỗi
JSTrung bình

010 · Mã Caesar

Dịch mỗi chữ cái tiếng Anh trong văn bản đi k vị trí theo bảng chữ cái vòng tròn; giữ nguyên hoa thường và ký tự khác chữ cái.

chuỗi
JSTrung bình

011 · Ký tự xuất hiện nhiều nhất

Tìm ký tự có tần suất cao nhất trong chuỗi; nếu hòa, chọn ký tự xuất hiện sớm hơn.

map
JSTrung bình

012 · Gom nhóm từ đồng nghĩa chữ

Gom các từ là hoán vị của cùng một tập ký tự vào một nhóm. Giữ thứ tự xuất hiện của nhóm và sắp xếp từ trong từng nhóm theo từ điển.

map và sắp xếp
JSDễ

013 · Bảng tần suất từ

Đếm số lần xuất hiện của mỗi từ và in các cặp theo thứ tự từ điển.

map
JSDễ

014 · Loại phần tử trùng, giữ thứ tự

Loại bỏ các số trùng trong dãy nhưng giữ lần xuất hiện đầu tiên.

set
JSDễ

015 · Giao của hai dãy

Tìm các số xuất hiện ở cả hai dãy, bỏ trùng và giữ thứ tự xuất hiện trong dãy thứ nhất.

set
JSDễ

016 · Hợp của hai dãy số

Tạo hợp của hai dãy số, chỉ giữ một lần mỗi giá trị và sắp xếp tăng dần.

set và sắp xếp
JSTrung bình

017 · Sắp xếp theo khoảng cách

Sắp xếp các số theo khoảng cách tuyệt đối đến x tăng dần; nếu hòa, số nhỏ hơn đứng trước.

sắp xếp
JSDễ

018 · K phần tử lớn nhất phân biệt

Từ dãy số, lấy tối đa k giá trị khác nhau lớn nhất và in theo thứ tự giảm dần.

mảng và sắp xếp
JSTrung bình

019 · Trộn hai dãy đã sắp xếp

Trộn hai dãy số đã sắp xếp tăng dần thành một dãy tăng dần, không loại phần tử trùng.

hai con trỏ
JSTrung bình

020 · Đoạn tăng liên tiếp dài nhất

Tìm độ dài lớn nhất của một đoạn liên tiếp tăng nghiêm ngặt trong dãy số.

mảng
JSDễ

021 · Phần tử lớn thứ hai

Tìm giá trị phân biệt lớn thứ hai trong dãy số; nếu không tồn tại, in NONE.

mảng
JSDễ

022 · Xoay mảng sang phải

Xoay dãy số sang phải k vị trí; các phần tử bị đẩy ra cuối sẽ quay về đầu.

mảng
JSDễ

023 · Tách số chẵn và lẻ

Đưa tất cả số chẵn lên trước rồi đến số lẻ, giữ nguyên thứ tự tương đối trong mỗi nhóm.

mảng
JSTrung bình

024 · Tích của các phần tử khác

Với mỗi vị trí, tính tích của mọi phần tử trong dãy ngoại trừ phần tử tại vị trí đó, không dùng phép chia.

prefix và suffix
JSTrung bình

025 · Tổng đoạn theo chỉ số

Tính tổng các phần tử từ chỉ số l đến r trong dãy, với chỉ số bắt đầu từ 0.

prefix sum
JSDễ

026 · Kiểm tra chuỗi ngoặc

Kiểm tra chuỗi chỉ gồm (), [], {} có đóng mở đúng thứ tự hay không.

ngăn xếp
JSTrung bình

027 · Khử cặp ký tự liền kề

Lặp lại thao tác xóa hai ký tự giống nhau đứng cạnh nhau cho đến khi không thể xóa thêm.

ngăn xếp
JSTrung bình

028 · Tính biểu thức hậu tố

Tính giá trị biểu thức hậu tố gồm số nguyên và các toán tử +, -, *, /. Phép chia lấy phần nguyên về 0.

ngăn xếp
JSDễ

029 · Mô phỏng hàng đợi phục vụ

Xử lý chuỗi lệnh enqueue:tên và serve; in các tên được phục vụ theo thứ tự. Lệnh serve trên hàng rỗng không làm gì.

hàng đợi
JSTrung bình

030 · Giá trị lớn nhất trong cửa sổ

Với mỗi cửa sổ liên tiếp dài k trong dãy, tìm phần tử lớn nhất.

hàng đợi đơn điệu
JSDễ

031 · Tổng từ 1 đến n bằng đệ quy

Tính 1 + 2 + ... + n bằng một hàm đệ quy với n không âm.

đệ quy
JSTrung bình

032 · Fibonacci có ghi nhớ

Tính số Fibonacci thứ n với F0 = 0 và F1 = 1, sử dụng kết quả đã tính để tránh lặp lại.

đệ quy và ghi nhớ
JSDễ

033 · Đếm cách leo cầu thang

Có thể bước một hoặc hai bậc mỗi lần. Đếm số cách đi lên đúng n bậc.

quy hoạch động
JSTrung bình

034 · Đổi tiền với ít đồng nhất

Tìm số đồng xu ít nhất để tạo đúng số tiền, mỗi mệnh giá được dùng không giới hạn. In -1 nếu không thể.

quy hoạch động
JSTrung bình

035 · Tổng đoạn con lớn nhất

Tìm tổng lớn nhất của một đoạn con liên tiếp không rỗng trong dãy số.

mảng và quy hoạch động
JSTrung bình

036 · Số đường đi trên lưới

Đếm số đường đi từ góc trên trái đến góc dưới phải của lưới, chỉ đi phải hoặc xuống và không đi qua ô bị chặn.

quy hoạch động trên lưới
JSTrung bình

037 · Đếm đảo trên lưới

Đếm số thành phần liên thông của các ô 1 trong lưới nhị phân, chỉ nối theo bốn hướng.

BFS và lưới
JSDễ

038 · Đảo ký tự từng từ

Giữ nguyên thứ tự các từ nhưng đảo ngược ký tự bên trong từng từ.

chuỗi
JSTrung bình

039 · So sánh phiên bản

So sánh hai chuỗi phiên bản gồm các nhóm số ngăn bởi dấu chấm. Các nhóm 0 ở cuối được xem như không tồn tại.

chuỗi và mảng
JSDễ

040 · Mã hóa theo độ dài

Mã hóa chuỗi bằng cách ghi mỗi ký tự theo sau là số lần lặp liên tiếp của ký tự đó.

chuỗi
JSDễ

041 · Giải mã theo độ dài

Giải mã chuỗi gồm các cặp một chữ cái theo sau là số đếm dương, bằng cách lặp chữ cái tương ứng.

chuỗi
JSDễ

042 · Khoảng cách Hamming

Đếm số vị trí khác nhau giữa hai chuỗi có cùng độ dài.

chuỗi
JSTrung bình

043 · Tìm cặp có tổng mục tiêu

Tìm hai chỉ số khác nhau có giá trị cộng lại bằng target; trả về cặp chỉ số đầu tiên theo thứ tự duyệt trái sang phải.

map
JSTrung bình

044 · Phần tử có tần suất tối thiểu

In các giá trị xuất hiện ít nhất t lần trong dãy, mỗi giá trị một lần và theo thứ tự tăng dần.

map
JSDễ

045 · Sắp xếp ba màu

Sắp xếp dãy chỉ gồm 0, 1 và 2 theo thứ tự tăng dần.

mảng
JSTrung bình

046 · Chọn nhiều cuộc hẹn nhất

Chọn nhiều khoảng thời gian không chồng lấn nhất. Một cuộc có thể bắt đầu đúng lúc cuộc trước kết thúc.

tham lam và khoảng
JSTrung bình

047 · Gộp các khoảng giao nhau

Gộp các khoảng có giao nhau hoặc chạm nhau thành những khoảng không giao nhau.

sắp xếp khoảng
JSDễ

048 · Định dạng hồ sơ người dùng

Mỗi bản ghi người dùng có dạng tên:tuổi. Hãy biến đổi thành dạng Tên (tuổi), giữ nguyên thứ tự.

biến đổi bản ghi
JSTrung bình

049 · Chọn học viên điểm cao

Từ các bản ghi tên:điểm, chọn học viên có điểm cao nhất; nếu hòa, chọn người xuất hiện trước.

biến đổi đối tượng
JSTrung bình

050 · Tính tổng giỏ hàng

Mỗi mặt hàng có dạng đơn_giá:số_lượng. Tính tổng tiền; giảm 10 phần trăm nếu tổng trước giảm giá từ 100 trở lên.

biến đổi đối tượng
C#Dễ

051 · Tổng số chẵn trong đoạn

Tính tổng các số chẵn trong đoạn nguyên đóng từ a đến b.

vòng lặp
C#Dễ

052 · Ước chung lớn nhất của dãy

Tìm ước chung lớn nhất của tất cả số nguyên trong dãy.

vòng lặp và số học
C#Trung bình

053 · Kiểm tra số Armstrong

Kiểm tra số không âm có bằng tổng các chữ số của nó lũy thừa số lượng chữ số hay không.

số học
C#Dễ

054 · Đổi nhị phân sang thập phân

Chuyển một chuỗi chỉ gồm 0 và 1 sang giá trị thập phân.

chuỗi và số học
C#Trung bình

055 · Một hàng của tam giác Pascal

In hàng thứ n của tam giác Pascal, đánh số hàng từ 0.

mảng và vòng lặp
C#Dễ

056 · Đếm chữ hoa và chữ thường

Đếm số chữ cái viết hoa và viết thường trong một dòng văn bản; bỏ qua chữ số và ký tự đặc biệt.

chuỗi
C#Dễ

057 · Đảo từng từ trong câu

Giữ thứ tự các từ nhưng đảo ký tự trong từng từ, đồng thời chuẩn hóa khoảng trắng giữa các từ.

chuỗi
C#Dễ

058 · Kiểm tra từ không lặp chữ

Kiểm tra văn bản có phải isogram: không có chữ cái nào lặp lại, không phân biệt hoa thường; bỏ qua ký tự không phải chữ cái.

chuỗi và set
C#Dễ

059 · Thay thế từ khóa

Thay mọi lần xuất hiện của từ cũ bằng từ mới trong văn bản.

chuỗi
C#Dễ

060 · Viết tắt tên

Lấy chữ cái đầu của mỗi từ trong tên và ghép thành một chuỗi viết hoa.

chuỗi
C#Dễ

061 · Bảng tần suất số

Đếm số lần xuất hiện của mỗi số và in theo thứ tự tăng dần của giá trị.

dictionary
C#Trung bình

062 · Top từ phổ biến

In tối đa k từ có tần suất cao nhất; nếu hòa, từ điển đứng trước được chọn trước.

dictionary và sắp xếp
C#Dễ

063 · Giao các nhãn

Tìm các nhãn xuất hiện trong cả hai tập nhãn, loại trùng và in theo thứ tự từ điển.

set
C#Trung bình

064 · Đếm cặp phần tử bằng nhau

Đếm số cặp chỉ số i < j có hai giá trị bằng nhau.

dictionary
C#Dễ

065 · Hiệu của hai tập số

In các số thuộc tập A nhưng không thuộc tập B, mỗi số một lần theo thứ tự tăng dần.

set
C#Trung bình

066 · Sắp xếp theo số chữ số

Sắp xếp số nguyên theo số chữ số tăng dần; nếu bằng nhau, sắp xếp theo giá trị tăng dần.

sắp xếp
C#Trung bình

067 · Xếp học viên theo điểm

Sắp xếp các bản ghi tên:điểm theo điểm giảm dần; nếu hòa, giữ thứ tự ban đầu.

sắp xếp bản ghi
C#Dễ

068 · Trung vị của dãy

Tìm trung vị của dãy số. Với số phần tử chẵn, in trung bình của hai phần tử giữa với một chữ số thập phân.

sắp xếp
C#Trung bình

069 · Trộn nhiều dãy tăng

Trộn mọi số từ nhiều dãy đã sắp xếp tăng dần thành một dãy tăng dần.

sắp xếp và mảng
C#Dễ

070 · Chèn vào dãy tăng

Chèn một số mới vào dãy đã sắp xếp tăng dần và giữ thứ tự tăng.

mảng
C#Dễ

071 · Kiểm tra thời điểm rảnh

Kiểm tra một thời điểm t có nằm trong cuộc hẹn nào không. Khoảng [start, end) chiếm từ start đến trước end.

khoảng thời gian
C#Trung bình

072 · Cặp có tổng không vượt mức

Tìm tổng lớn nhất của hai phần tử khác vị trí nhưng không vượt quá giới hạn L. In -1 nếu không có cặp.

mảng và tham lam
C#Trung bình

073 · Mô phỏng ngăn xếp bằng lệnh

Xử lý các lệnh push:x, pop và top. In giá trị trả về của pop hoặc top theo thứ tự; lệnh trên stack rỗng trả về EMPTY.

ngăn xếp
C#Trung bình

074 · Trình soạn thảo có hoàn tác

Mô phỏng trình soạn thảo với lệnh add:text, backspace và undo. Undo khôi phục trạng thái trước chỉnh sửa gần nhất.

ngăn xếp
C#Trung bình

075 · Rút gọn đường dẫn Unix

Rút gọn đường dẫn tuyệt đối: dấu chấm là thư mục hiện tại, hai dấu chấm quay lại một thư mục, nhiều dấu gạch chéo được gộp.

ngăn xếp và chuỗi
C#Trung bình

076 · Mô phỏng hàng đợi Round Robin

Mỗi công việc có tên và thời gian còn lại. Phục vụ theo vòng tròn với quantum cố định; in tên theo thứ tự hoàn tất.

hàng đợi
C#Trung bình

077 · Đường đi ngắn nhất trên lưới

Tìm số bước ít nhất từ góc trên trái đến góc dưới phải trên lưới 0-1, chỉ đi bốn hướng qua ô 0; in -1 nếu không tới được.

BFS và lưới
C#Dễ

078 · Sinh các số nhị phân

Sinh biểu diễn nhị phân của các số từ 1 đến n theo thứ tự tăng dần.

hàng đợi
C#Dễ

079 · Đếm chữ số bằng đệ quy

Đếm số chữ số của một số nguyên bằng hàm đệ quy; số 0 có một chữ số.

đệ quy
C#Dễ

080 · Đảo chuỗi bằng đệ quy

Đảo ngược chuỗi bằng một hàm đệ quy, không dùng hàm đảo chuỗi có sẵn.

đệ quy và chuỗi
C#Trung bình

081 · Đếm tập con có tổng mục tiêu

Đếm số tập con của dãy số dương có tổng đúng bằng target; mỗi phần tử dùng tối đa một lần.

quy hoạch động
C#Trung bình

082 · Đếm cách đổi tiền

Đếm số cách tạo số tiền bằng các mệnh giá không giới hạn, không phân biệt thứ tự các đồng.

quy hoạch động
C#Trung bình

083 · Bài toán ba lô 0/1

Chọn mỗi món đồ tối đa một lần để tổng khối lượng không vượt sức chứa và tổng giá trị lớn nhất.

quy hoạch động
C#Trung bình

084 · Độ dài dãy con chung dài nhất

Tìm độ dài dãy con chung dài nhất của hai chuỗi, không yêu cầu các ký tự liên tiếp.

quy hoạch động trên chuỗi
C#Trung bình

085 · Kiểm tra có thể ghép từ

Cho từ điển và một văn bản, xác định văn bản có thể tách hoàn toàn thành các từ trong từ điển hay không.

quy hoạch động trên chuỗi
C#Trung bình

086 · Diện tích đảo lớn nhất

Tìm diện tích lớn nhất của một thành phần ô 1 nối theo bốn hướng trong lưới nhị phân.

BFS và lưới
C#Trung bình

087 · Độ dài ngoặc hợp lệ dài nhất

Tìm độ dài đoạn liên tiếp dài nhất gồm các cặp ngoặc tròn hợp lệ.

ngăn xếp
C#Trung bình

088 · Phần tử lớn hơn kế tiếp

Với mỗi phần tử, tìm phần tử đầu tiên bên phải lớn hơn nó; in -1 nếu không có.

ngăn xếp đơn điệu
C#Trung bình

089 · Đoạn có tối đa k giá trị khác nhau

Tìm độ dài đoạn liên tiếp dài nhất chứa không quá k giá trị khác nhau.

cửa sổ trượt
C#Dễ

090 · Chuyển vị ma trận

Chuyển vị ma trận r hàng c cột: hàng thứ i của kết quả là cột thứ i của ma trận ban đầu.

ma trận
C#Trung bình

091 · Duyệt ma trận hình xoắn ốc

Đọc các phần tử ma trận theo đường xoắn ốc bắt đầu từ góc trên trái và đi sang phải.

ma trận
C#Trung bình

092 · Xoay ma trận 90 độ

Xoay ma trận vuông theo chiều kim đồng hồ 90 độ.

ma trận
C#Dễ

093 · Xếp loại học viên

Mô hình hóa mỗi học viên bằng tên và điểm nguyên. Học viên đạt từ 50 trở lên có nhãn PASS, còn lại FAIL.

lập trình hướng đối tượng
C#Trung bình

094 · Tính giá trị kho hàng

Mỗi sản phẩm có tên, đơn giá và số lượng. Tính giá trị từng sản phẩm, sắp xếp giảm dần theo giá trị rồi theo tên.

lập trình hướng đối tượng
C#Dễ

095 · Thông tin hình chữ nhật

Tạo đối tượng hình chữ nhật từ chiều rộng và chiều cao, rồi tính diện tích và chu vi.

lập trình hướng đối tượng
C#Trung bình

096 · Mô phỏng tài khoản ngân hàng

Mô phỏng tài khoản với số dư ban đầu, lệnh deposit:x và withdraw:x. Bỏ qua lệnh rút vượt số dư.

lập trình hướng đối tượng
C#Dễ

097 · Danh sách phát nhạc

Mô hình hóa playlist bằng hàng đợi. Lệnh add:tên bài thêm bài, next phát bài đầu tiên; in các bài đã phát.

lập trình hướng đối tượng và hàng đợi
C#Trung bình

098 · Tính lương nhân viên

Mỗi nhân viên có tên, số giờ và đơn giá. Tính tổng lương của tất cả nhân viên.

lập trình hướng đối tượng
C#Dễ

099 · Báo cáo nhiệt độ

Tạo các đối tượng Temperature từ dãy Celsius rồi báo cáo nhiệt độ nhỏ nhất, lớn nhất và trung bình.

lập trình hướng đối tượng và mảng
C#Trung bình

100 · Tính phí trả sách

Mỗi sách có tên và số ngày mượn. Miễn phí trong 14 ngày, sau đó tính 2 đơn vị tiền cho mỗi ngày quá hạn.

lập trình hướng đối tượng