Thuật toánLập trình cơ bản Câu 1: CẶP SỐ NGUYÊN TỐ ĐẦU TIÊN CÓ TỔNG BẰNG N Cho số tự nhiên N.. Input: Dòng đầu tiên đưa vào số lượng bộ test T.. Mỗi bộ test gồm là một số N được ghi tr
Trang 1Thuật toán
Lập trình cơ bản
Câu 1: CẶP SỐ NGUYÊN TỐ ĐẦU TIÊN CÓ TỔNG BẰNG N
Cho số tự nhiên N Hãy tìm cặp số nguyên tố đầu tiên có tổng là N Nếu không tồn tạicặp số nguyên tố có tổng bằng N, hãy đưa ra -1
Input:
Dòng đầu tiên đưa vào số lượng bộ test T
Những dòng kế tiếp đưa vào các bộ test Mỗi bộ test gồm là một số N được ghi trên một dòng
Trang 2cout <<"-1\n";
}}}
Câu 2: SỐ NGUYÊN TỐ
Viết chương trình kiểm tra một số nguyên dương có phải số nguyên tố hay không.
Dòng đầu của dữ liệu vào ghi số bộ test Mỗi dòng tiếp theo có một nguyên dươngkhông quá 9 chữ số Kết quả in ra YES nếu đó là số nguyên tố, in ra NO nếu ngược lại
Trang 3cout <<"NO"<<"\n";
}}}
Câu 3: BỘI SỐ CHUNG - ƯỚC SỐ CHUNG
Trang 4Tìm bội số chung nhỏ nhất và ước số chung lớn nhất của hai số nguyên dương a, b.
Input:
Dòng đầu tiên đưa vào T là số lượng bộ test
T dòng tiếp theo mỗi dòng có một cặp số a, b
T, a, b thỏa mãn ràng buộc: 1≤T≤100; 1≤a, b≤108;
Trang 5b -= a;
}}
cout << bc/a << " " << a <<"\n";
}
}
Câu 4: ƯỚC SỐ NGUYÊN TỐ LỚN NHẤT
Cho số nguyên dương N Hãy đưa ra ước số nguyên tố lớn nhất của N
Input:
Dòng đầu tiên đưa vào số lượng bộ test T
Những dòng kế tiếp đưa vào T bộ test Mỗi bộ test ghi số nguyên dương N
Trang 6else cout << res << endl;
}return 0;
}
Câu 5: TÌM KIẾM NHỊ PHÂN
Cho dãy số A[] gồm có N phần tử đã được sắp xếp tăng dần và số K
Nhiệm vụ của bạn là kiểm tra xem số K có xuất hiện trong dãy số hay không Nếu có hãy in ra vị trí trong dãy A[], nếu không in ra “NO”
Input:
Dòng đầu tiên là số lượng bộ test T (T ≤ 10)
Mỗi test bắt đầu bằng số nguyên N và K (N ≤ 100 000, 0 ≤ K ≤ 106)
Dòng tiếp theo gồm N số nguyên A[i] (0 ≤ A[i] ≤ 106), các phần tử là riêng biệt
Output:
Với mỗi test in ra trên một dòng đáp án tìm được
Ví dụ:
Trang 7int a[n];
for(int i = 0; i < n; i++){
cin >> a[i];
}if(vitri(a,n,k) == 0){
Trang 8cout << "NO" << endl;
}else {
cout << vitri(a,n,k) << endl;
}}
Kết quả: Ghi ra màn hình từng bước thực hiện thuật toán Mỗi bước trên một dòng,
các số trong dãy cách nhau đúng một khoảng trống
Trang 9cout << "Buoc " << t <<": ";t++;
for(int i=0;i<n;i++){
cout << a[i] <<" ";}
for(int i=0;i<n;i++){
cout << a[i] <<" ";}
cout <<"\n";
}
Trang 10Kết quả: Ghi ra màn hình từng bước thực hiện thuật toán Mỗi bước trên một dòng,
các số trong dãy cách nhau đúng một khoảng trống
Trang 11if(ok==0) break;
cout <<"Buoc "<< i+1 <<": ";
for(int k=0;k<n;k++) cout << a[k] <<" ";
Dữ liệu vào: Dòng đầu tiên ghi số bộ test Mỗi bộ test viết trên một dòng số nguyên
dương tương ứng cần kiểm tra
Kết quả: Mỗi bộ test viết ra YES hoặc NO, tương ứng với bộ dữ liệu vào
Code:
#include<iostream>
Trang 12cout <<"NO"<<"\n";}
}
}
Câu 9: Số thuần nguyên tố
Trang 13Một số được coi là thuần nguyên tố nếu nó là số nguyên tố, tất cả các chữ số là nguyên
tố và tổng chữ số của nó cũng là một số nguyên tố Bài toán đặt ra là đếm xem trongmột đoạn giữa hai số nguyên cho trước có bao nhiêu số thuần nguyên tố
Dữ liệu vào: Dòng đầu tiên ghi số bộ test Mỗi bộ test viết trên một dòng hai số
nguyên dương tương ứng, cách nhau một khoảng trống Các số đều không vượt quá 9 chữ số
Kết quả: Mỗi bộ test viết ra số lượng các số thuần nguyên tố tương ứng.
}
}
int chusont(long long n){
while (n > 0){
Trang 15Dòng đầu tiên là số lượng bộ test T (T ≤ 10)
Mỗi test gồm số nguyên N (1≤ N ≤ 100 000), số lượng phần tử trong dãy số ban đầu
Code:
#include<iostream>
using namespace std;
int main(){
Trang 16int ans = 0;
for(int i = 1; i <=n; i++)ans ^= a[i];
cout << ans << endl;
Dòng đầu tiên là số lượng bộ test T (T ≤ 20)
Mỗi test gồm số nguyên N (1≤ N ≤5000)
Dòng tiếp theo gồm N số nguyên A[i] (1 ≤ A[i] ≤ 10^9)
Trang 17if (a[l] + a[r] == a[i]) return true;
if(a[l] + a[r] < a[i]) l++;
Trang 18cin >> n;
for(i=0;i<n;i++) cin >> a[i];
if(check(a, n)) cout << "YES" << endl;
else cout << "NO" << endl;
Trang 19 Dòng đầu ghi số bộ test, không quá 10
Mỗi dòng ghi một số nguyên dương N, không quá 109
Kết quả:
Với mỗi test, ghi kết quả trên một dòng
Trang 21Câu 16: Ước số chung lớn nhất
Viết chương trình tính ước số chung lớn nhất của 2 số nguyên dương (không quá 6 chữsố)
Trang 22b -= a;
}}
Trang 23Dữ liệu vào chỉ có một dòng ghi số n không
Câu 18: Làm tròn số
Cho số nguyên dương không quá 9 chữ số Hãy làm tròn số N theo quy tắc sau:
Nếu N>10, làm tròn đến số hàng chục gần nhất
Sau đó nếu kết quả lớn hơn 100 thì làm tròn đến số hàng trăm gần nhất
Sau đó nếu kết quả lớn hơn 1000 thì làm trong đến số hàng nghìn gần nhất
Cứ tiếp tục như vậy …
Chú ý: Giá trị 5 sẽ được làm tròn lên
Input
Dòng đầu ghi số bộ test (không quá 100)
Mỗi bộ test ghi số N trên một dòng (N nguyên dương và không quá 9 chữ số)
Output
Với mỗi test, ghi ra kết quả làm tròn tương ứng trên một dòng
Trang 25Câu 19: Ước số chia hết cho 2
Cho số nguyên dương N
Nhiệm vụ của bạn là hãy xác định xem có bao nhiêu ước số của N chia hết cho 2?
Input:
Dòng đầu tiên là số lượng bộ test T (T ≤ 100)
Mỗi bộ test gồm một số nguyên N (1 ≤ N ≤ 109)
Trang 26int dem = 1;
if(n%2==1){
return 0;
}else {for(int i = 2; i <= sqrt(n); i++){
return dem ;}