Tải bản đầy đủ (.docx) (27 trang)

Bài tập ngôn ngữ lập trình C++ (có lời giải)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (372.01 KB, 27 trang )

Thuật tốn
Lập trình cơ bản
Câu 1: CẶP SỐ NGUN TỐ ĐẦU TIÊN CÓ TỔNG BẰNG N
Cho số tự nhiên N. Hãy tìm cặp số ngun tố đầu tiên có tổng là N. Nếu khơng tồn tại
cặp số ngun 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.
 T, N thỏa mãn ràng buộc: 1≤T≤100; 1≤ N ≤106.
Output:
 Đưa ra kết quả mỗi test theo từng dòng.
Input:

Output:

2
4

22

8

Code:
#include <iostream>
#include <math.h>
using namespace std;
int nto( int n) {
if(n < 2) return 0;
for(int i = 2; i <= sqrt(n); i++)
if(n%i==0)


return 0;
return 1;
}

35


int main(){
int t;
cin >> t;
while(t--){
int n;
cin >> n;
int dem = 0;
for(int i = 1; i<= n/2; i++){
if(nto(i)&&nto(n-i)){
cout << i <<" "<dem = 1;
break;
}
}
if(dem == 0){
cout <<"-1\n";
}
}
}
Câu 2: SỐ NGUYÊN TỐ
Viết chương trình kiểm tra một số ngun dương có phải số ngun 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ương
khô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.


Input

Output

3

NO

123456

YES

997

NO


111111111

Code:
#include<iostream>
#include<math.h>
using namespace std;
int snt ( long long n){
if ( n < 2){
return 0;
}
for ( int i = 2; i <= sqrt(n); i++){
if ( n % i == 0 )

return 0;
}
return 1;
}
int main(){
int test;
cin >> test;
while(test --){
long long n;
cin >> n;
if(snt(n)){
cout <<"YES" <<"\n";
}
else{
cout <<"NO"<<"\n";
}
}
}


Câu 3: BỘI SỐ CHUNG - ƯỚC SỐ CHUNG
Tì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;
Output:
 Đưa ra kết quả mỗi test theo từng dịng.
Ví dụ:


Input

Output

2

10 5

5 10

56 2

14 8

Code:
#include<iostream>
using namespace std;
int main(){
int test;
cin >> test;
while(test --){
long long a, b;
cin >> a >> b;
long long bc = a * b;
while( a!=b){


if(a > b){
a -= b;
}

else{
b -= 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.
 T, N thỏa mãn ràng buộc: 1≤T≤100; 2≤N≤1010.
Output:
 Đưa ra kết quả mỗi test theo từng dịng.
Ví dụ:

Input:

Output:

2

7

315

31


31

Code:


#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin >> t;
while(t--){
long long n;
cin >> n;
int res = 0;
for(int i = 2; i <= sqrt(n); i++)
while(n % i == 0){
n/=i;
res = i;
}
if(n > 1)
cout << n << endl;
else 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ụ:
Input:

Output

2
53
3
12345
NO
65
0 1 2 3 9 10

Code:
#include<bits/stdc++.h>
using namespace std;
int vitri(int a[], int n, int k){
for(int i = 0; i < n; i++){
if(a[i] == k){
return i + 1;
}
}
return 0;

}
int main(){
int t;
cin >> t;
while(t--){
int n , k ;
cin >> n >> k;
int a[n];


for(int i = 0; i < n; i++){
cin >> a[i];
}
if(vitri(a,n,k) == 0){
cout << "NO" << endl;
}
else {
cout << vitri(a,n,k) << endl;
}
}
return 0;
}

Câu 6: SẮP XẾP CHỌN
Hãy thực hiện thuật toán sắp xếp chọn trên dãy N số nguyên. Ghi ra các bước thực
hiện thuật tốn.
Dữ liệu vào: Dịng 1 ghi số N (khơng q 100). Dịng 2 ghi N số ngun dương
(khơng q 100).
Kết quả: Ghi ra màn hình từng bước thực hiện thuật tố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.

Ví dụ:
Input

Output
Buoc 1: 2 7 3 5

4
Buoc 2: 2 3 7 5
5732
Buoc 3: 2 3 5 7

Code:
#include <iostream>
using namespace std;


int main(){
int n;
cin >> n;
int a[n];
for(int i=0;icin >> a[i];
}
int t=1;
for(int i=0;iint min=i;
for(int j=i+1;jif(a[j]min=j;
}

}
if(i>0){
cout << "Buoc " << t <<": ";
t++;
for(int i=0;icout << a[i] <<" ";
}
cout <<"\n";
}
int tmp=a[i];
a[i]=a[min];
a[min]=tmp;
if(i==n-2){
cout << "Buoc "<< t <<": ";
t++;
for(int i=0;i

cout << a[i] <<" ";
}
cout <<"\n";
}
}
}

Câu 7: Sắp xếp nổi bọt
Hãy thực hiện thuật toán sắp xếp nổi bọt trên dãy N số nguyên. Ghi ra các bước thực
hiện thuật tốn.
Dữ liệu vào: Dịng 1 ghi số N (khơng q 100). Dịng 2 ghi N số ngun dương
(khơng q 100).

Kết quả: Ghi ra màn hình từng bước thực hiện thuật tố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.
Ví dụ:
Input

Output
Buoc 1: 3 2 5 7

4
Buoc 2: 2 3 5 7
5327

Code:
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int a[n];
for(int i=0;icin >> a[i];
}


for(int i=0;iint ok=0;
for(int j=0;jif(a[j]>a[j+1]){
int tmp=a[j];
a[j]=a[j+1];

a[j+1]=tmp;
ok=1;
}
}
if(ok==0) break;
cout <<"Buoc "<< i+1 <<": ";
for(int k=0;kcout << a[k] <<" ";
cout <<"\n";
}
}

Câu 8: BẮT ĐẦU VÀ KẾT THÚC
Viết chương trình kiểm tra một số nguyên dương bất kỳ (2 chữ số trở lên, không quá 9
chữ số) có chữ số bắt đầu và kết thúc bằng nhau hay khơng.
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
Ví dụ:
Input

Output

2

YES

12451

NO



1000012

Code:
#include<iostream>
using namespace std;
int sodau(long long n){
int tach;
while ( n > 0){
tach = n % 10;
n /= 10;
}
return tach;
}
int socuoi(long long n){
int tach;
tach = n % 10;
return tach;
}
int main(){
int t;
cin >> t;
while(t--){
long long n;
cin >> n;
if(sodau(n) == socuoi(n)){
cout <<"YES"<<"\n";
}
else{

cout <<"NO"<<"\n";
}


}
}

Câu 9: Số thuần nguyên tố
Mộ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ố ngun tố. Bài tốn đặt ra là đếm xem trong
mộ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.
Ví dụ:
Input

Ouput

2

1

23 199

15

2345 6789


Code:
#include<iostream>
#include<math.h>
using namespace std;
int snt(long long n){
if ( n < 2)
return 0;
else {
for(int i = 2 ; i <= sqrt(n); i++){
if( n% i == 0)
return 0;
}
return 1;


}
}
int chusont(long long n){
while (n > 0){
int t = n % 10;
if(t !=2 && t != 3 && t != 5 && t != 7)
return 0;
n /= 10;
}
return 1;
}
int tongcso(long long n){
int tach, s = 0;
while (n != 0){
tach = n % 10;

s += tach;
n /= 10;
}
for( int k = 2; k <= sqrt(s); k++){
if( s % k == 0)
return 0;
}
return 1;
}
int main(){
int t;
cin >> t;
while(t--){
long long a , b , dem = 0;
cin>>a>>b;


for (int n = a; n <= b; n++){
if(chusont(n) == 1 && tongcso(n) == 1 && snt(n) == 1)
dem ++;
}
cout << dem <<"\n";
}
}

Câu 10: Tần suất lẻ
Cho dãy số A[] gồm có N phần tử. Các phần tử trong dãy số đều xuất hiện với tần suất
chẵn, chỉ có duy nhất 1 số có số lần xuất hiện là số lẻ. Nhiệm vụ của bạn là hãy tìm số
này.
Input:

Dị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.
N là một số lẻ.
Dòng tiếp theo gồm N số nguyên A[i] (1 ≤ A[i] ≤ 1 000 000).
Output:
Với mỗi test in ra trên mỗi dòng một số nguyên là đáp án của bài tốn.

Ví dụ:
Input:

Output

2

3

7

2

1232313
5
11332


Code:
#include<iostream>
using namespace std;
int main(){
int t ,n ;

cin >> t;
while(t--){
cin >> n;
int a[n+1];
for(int i = 1; i <=n; i++)
cin >> a[i];
int ans = 0;
for(int i = 1; i <=n; i++)
ans ^= a[i];
cout << ans << endl;
}
}

Câu 11: Bộ ba số Pytago
Cho dãy số A[] gồm có N phần tử. Một bộ 3 số (a, b, c) được gọi là bộ ba số Pytago
nếu như a^2 + b^2 = c^2.
Nhiệm vụ của bạn là kiểm tra xem có tồn tại bộ ba số Pytago trong dãy số A[] hay
khơng?
Input:
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).
Output:
Với mỗi test, in ra trên một dịng “YES” nếu tìm được, và “NO” trong trường hợp
ngược lại.


Ví dụ:
Input:


Output

2

YES

5

NO

31465
3
111

Code:
#include<bits/stdc++.h>
using namespace std;
bool check(long long a[], int n){
int i, l, r;
for (i=0; isort(a, a + n);
for(i = n-1; i >= 2; i--){
l = 0; r = i-1;
while (l < r){
if (a[l] + a[r] == a[i]) return true;
if(a[l] + a[r] < a[i]) l++;
else r--;
}
}
return false;

}


main(){
long long a[100005]; int t, n, i;
cin >> t;
while(t--){
cin >> n;
for(i=0;i<n;i++) cin >> a[i];
if(check(a, n)) cout << "YES" << endl;
else cout << "NO" << endl;
}
}
Câu 12: Gấp đôi
Cho số tự nhiên N không quá 7 chữ số. Hãy in ra giá trị gấp đơi của N.
Input
Có duy nhất một số tự nhiên không quá 7 chữ số.
Output
Ghi ra kết quả trên một dịng.
Ví dụ
Input

Output

23

46

Code:
#include<iostream>

using namespace std;
int main(){
int n;
cin >> n;
cout << n*2;
}


Câu 13: Bình phương
Cho số tự nhiên N khơng q 9 chữ số. Hãy in ra giá trị bình phương của N.
Input
Dòng đầu ghi số bộ test. Mỗi bộ test có duy nhất một số tự nhiên khơng q 9 chữ số.
Output
Với mỗi bộ test, ghi ra kết quả trên một dịng.
Ví dụ
Input

Output

2

1

1

529

23

Code:

#include<iostream>
using namespace std;
int main(){
int t;
cin >> t;
long long n;
while(t--){
cin >> n;
cout << n*n <<"\n";
}
}
Câu 14: Tính tổng từ 1 đến N
Cho số nguyên dương N.
Hãy tính S = 1 + 2 + ... + N


Dữ liệu vào:
 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.
Ví dụ:
Input

Output

2

55


10

210

20
Code:
#include<iostream>
using namespace std;
int main(){
int t;
cin >> t;
while(t--){
long long n;
cin >> n;
cout << (n*(n+1)/2) <<"\n";
}
}
Câu 15: Tổng chữ số
Hãy viết chương trình tính tổng các chữ số của một số nguyên bất kỳ.
Input
Dòng đầu tiên của dữ liệu vào ghi số bộ test, mỗi bộ test ghi trên một dịng 1 số
ngun dương khơng q 9 chữ số.


Output
Kết quả của mỗi bộ test cũng ghi trên một dịng.
Ví dụ
Input

Output


1

10

1234

Code:
#include<iostream>
using namespace std;
int main(){
long long test;
cin >> test;
while(test--){
long long n;
cin >> n;
long long tach, sum = 0;
while(n > 0){
tach = n % 10;
sum += tach;
n /= 10;
}
cout << sum <<"\n";
}
}
Câ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ố).
Input



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.
Output
Mỗi bộ test ghi ra kết quả tính được trên một dịng.
Ví dụ

Input

Output

2

2

24 14

25

75 125

Code:
#include<iostream>
using namespace std;
int main(){
int test;
cin >> test;
while(test --){
long long a, b;
cin >> a >> b;
long long bc = a * b;

while( a!=b){
if(a > b){
a -= b;
}
else{
b -= a;
}
}


cout << a << " " <<"\n";
}
}
Câu 17: Tổng giai thừa
Viết chương trình tính tổng S = 1 + 1.2 + 1.2.3 Input
+ ...+1.2.3...n.
3
Dữ liệu vào chỉ có một dịng ghi số n không
quá 20.

Output
9

Kết quả cũng được ghi trên một dòng duy
nhất.

Code:
#include<iostream>
using namespace std;
int main(){

int n;
cin >> n;
long long sum = 0, gt = 1;
for(int i = 1; i <= n; i++){
gt = gt * i;
sum += gt;
}
cout << sum <<"\n" ;
}
Câu 18: Làm tròn số
Cho số nguyên dương khơng q 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.
Ví dụ
Input

Output

7


20

15

10

14

5

5

100

99

10000000

12345678

50000000

44444445

2000

1445

Code:
#include <iostream>

using namespace std;
long long n;
void in()
{
cin>> n;
long long tmp=0, ans=1;
while (n/10!=0)
{


tmp=(n%10+tmp>=5);
n = n / 10;
ans = ans*10;
}
cout << (n+tmp)*ans << endl;
}
int main()
{
int t;
cin>> t;
for (int i=1; i<=t; i++)
in();
return 0;
}
Câ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)

Output:
Với mỗi test, in ra đáp án tìm được trên một dịng.
Ví dụ:
Input:

Output:

2

0

9

3


×