Bài tập lập trình C/C++ có lời giải chi tiết
LỜI GIẢI CHI TIẾT CHỈ MANG TÍNH CHẤT THAM KHẢO CHO CÁC NEWBIE CHƯA PHẢI THẬT SỰ LÀ THUẬT TOÁN TỐI ƯU NHÉ(Các bác bỏ qua cho nhé)!
Bài 1.Nhập đúng password là một số sử dụng cấu trúc lặp do..while.
Code:
// Đăng nhập password
#include"stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
int main(void)
{
int number = 1001, pass;
do {
system("cls");//xóa màn hình
..............
return 0;
}
Code chi tiết: Tải về
Bài 2.Hãy viết chương trình liệt kêt tất cả các số tự nhiên K thỏa mãn đồng thời những điều kiện dưới đây:
a)K là số có N chữ số;
b)K là số nguyên tố;
c)Đảo ngược các chữ số trong K là một số nguyên tố;
d)Tổng các chữ số trong K cũng là một số nguyên tố;
e)Mỗi chữ số trong K cũng là các số nguyên tố.
Code:
// Bài 2
#include"stdafx.h"
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
//K là số nguyên tố
int ngto(int n)
{
if (n < 2) return 0;
else
{
int i;
for (i = 2; i < sqrt(n); i++)
{
if (n%i == 0) return 0;
}
return 1;
}
}
/*Đảo ngược các chữ số trong K
Kiểm tra ngtố từng chữ số
Kiểm tra tổng chữ số
*/
Code chi tiết: Tải về
Bài 3.Hãy viết chương trình liệt kêt tất cả các số tự nhiên K thỏa mãn đồng thời những điều kiện dưới đây:
a)K là số có N chữ số;
b)K là số đối xứng;
c)Tổng các chữ số của K là số chia hết cho 10;
d)Các chữ số của K đều khác 0.
Code:
#include"stdafx.h"
#include<iostream>
#include<cmath>
using namespace std;
int sodoixung(int n)
{
int m, i;
m = n;
int sochuso = 0;
while (n > 0)
{
n /= 10;
sochuso++;
}
int A[100], dem = 0, dem1 = 0;
while (m > 0)
{
A[dem] = m % 10;
dem++;
m /= 10;
}
for (i = 0; i < dem; i++)
{
if (A[i] == A[dem - i - 1])
{
dem1++;
}
}
if (dem1 == sochuso) return 1;
}
Code chi tiết: Tải về
Bài 4.Nhân dịp phát hành các số điện thoại 0919xxx.xxx. Công ty
Vinaphone dự định phát phát hành N số điện thoại loại 1, M số điện thoại loại
2, K số điện thoại loại 3. Trong đó, số điện thoại loại 1, 2, 3 được định nghĩa
như sau:
Loại
1: là những số điện thoại có sáu số cuối cùng của nó tạo
thành một số đối xứng (thuận nghịch) có
sáu chữ số.
Loại
2: là những số điện thoại loại 1 có sáu số cuối cùng của
nó là các chữ số khác 0.
Loại
3: là những số điện thoại loại 2 có tổng của sáu chữ số cuối
cùng là một số chia hết cho 10.
Bài toán
được đặt ra là: cho một phương án phát hành N, M, K. Hãy cho biết công ty
Vinaphone có thể thực hiện được phương án phát hành kể trên hay không? Đưa ra kết
quả “YES” nếu phương án phát hành thực hiện được, đưa ra kết quả “NO” nếu
phương án phát hành không thể thực hiện được.
Code:
//
0919XXX.XXX
#include"stdafx.h"
#include<iostream>
#include<cmath>
using namespace std;
int sodoixung(int n)
{
int m, i,l;
m = n;
l = n;
int sochuso = 0;
while (n > 0)
{
n /= 10;
sochuso++;
}
int A[100], dem = 0, dem1 = 0;
while (m > 0)
{
A[dem] = m % 10;
dem++;
m /= 10;
}
for (i = 0; i < dem; i++)
{
if (A[i] == A[dem - i - 1])
{
dem1++;
}
}
if (dem1 == sochuso) return l;
}
Code chi tiết : Tải về
Bài 4.Liệt kê các tổ hợp chập K của 1, 2,..,N. Ví dụ với
N=5, K =3 ta có kết quả sau:
1 2 3 1
3 5 2 4 5
1 2 4 1 4 5 3 4 5
1
2 5 2 3 4
1
3 4 2 3 5
Code:
#include "stdafx.h"
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
int k, n;
int A[1000];
void result()
{
for (int i = 1;
i <= k; i++)
{
cout << setw(3) << A[i];
}
cout << endl;
}
void Back(int i)
{
for (int j = A[i - 1] + 1; j <= n - k + i; j++)
{
A[i] = j;
if (i == k)
{
result();
}
else
{
Back(i + 1);
}
}
}
Code chi tiết : Tải về
Bài 5.Tính giá trị nhỏ nhất của str sau khi loại bỏ k phần tử (str là xâu kí tự bao gồm các ký tự từ A đến Z,giá trị của str là tổng bình phương số lần xuất hiện mỗi kí tự)
Vd: S="ABBCCC",f(S)=1^2+2^2+3^2
k=2,fmin(S)=1^2+2^2+1^2
Code:
- #include<iostream>
- #include<cstring>
- #include<cmath>
- using namespace std;
- char str[100],B[100];
- void sapxep(int D[100],int dem2)//Hàm sắp xếp lại mảng tăng dần khi bớt lần lượt k
- {
- int bientam;
- for (int i = 0; i < dem2; i++)
- {
- for (int j = i + 1; j < dem2; j++)
- {
- if (D[i] < D[j])
- {
- bientam = D[i];
- D[i] = D[j];
- D[j] = bientam;
- }
- }
- }
- }
- void solan(int k)//Hàm chính của
- {
- int C[100],dem1=0,tong=0;
- int i;
- for (i = 0; i < strlen(str); i++)//Tạo một mảng chưa đánh dấu
- {
- B[i] = 1;
- }
- for (i = 0; i < strlen(str); i++)//Liệt kê số lần xuất hiện của mỗi kí tự ném vào mảng C
- {
- if (B[i])
- {
- int dem = 1;
- B[i] = 0;
- for (int j = i + 1; j < strlen(str); j++)
- {
- if (str[i] == str[j])
- {
- dem++;
- B[j] = 0;
- }
- }
- C[dem1] = dem;
- dem1++;
- }
- }..................
Bài 6.Hoán vị của n phần tử
Code:
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int n, A[100],chuaxet[100];
void Init()
{
cout << "Nhap n: ";
cin >> n;
for (int i = 1; i <= n; i++)
{
chuaxet[i] = true;
}
}
Code chi tiết: Tải về
Bài 7.Cho dãy số A[]=(a1,...an) và số tự nhiên k.Hãy liệt kê tất cả các dãy con của A[] sao cho tổng các phần tử đúng =k?
Ex:
Input: Output:
5 50 5 20 25
5 10 15 20 25 5 10 15 20
10 15 25
Code:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int n, A[100],X[100],k, OK = true;
void Init()
{
int i;
cout << "Nhap so phan tu: ";
cin >> n;
cout << "Nhap tong k: ";
cin >> k;
cout << "Nhap lan luot cac phan tu: ";
for (i = 1; i <= n; i++)
{
cin >> A[i];
}
for (i = 1; i <= n; i++)
{
X[i] = 0;
}
}
void Key()
{
int i = n;
while (i > 0 && (X[i] != 0))
{
X[i] = 0;
i--;
}
if (i > 0)
{
X[i] = 1;
int S = 0;
for (i = 1; i <= n; i++)
{
S = S + A[i] * X[i];
}
Code chi tiết: Tải về
Bài 8.Cho xâu kí tự S.Hãy tìm kí tự xuất hiện nhiều nhất
VD: S[]="ABCDABBB"
Output:
B 4
Code:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char A[100], B[100];
cin>> A;
int n = strlen(A);
for (int i = 0; i < n; i++)
{
B[i] = 1;
}
int C[100];
for (int i = 0; i < n; i++)
{
C[i] = 1;
if (B[i])
{
B[i] = 0;
for (int j = i + 1; j < n; j++)
{
if (A[i] == A[j])
{
B[j] = 0;
C[i]++;
}
}
}
}................................
Code chi tiết: Tải về
Bài 9.Viết chương trình xây dựng các thao tác trên đa thức.
Code:
Bài 7.Cho dãy số A[]=(a1,...an) và số tự nhiên k.Hãy liệt kê tất cả các dãy con của A[] sao cho tổng các phần tử đúng =k?
Ex:
Input: Output:
5 50 5 20 25
5 10 15 20 25 5 10 15 20
10 15 25
Code:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int n, A[100],X[100],k, OK = true;
void Init()
{
int i;
cout << "Nhap so phan tu: ";
cin >> n;
cout << "Nhap tong k: ";
cin >> k;
cout << "Nhap lan luot cac phan tu: ";
for (i = 1; i <= n; i++)
{
cin >> A[i];
}
for (i = 1; i <= n; i++)
{
X[i] = 0;
}
}
void Key()
{
int i = n;
while (i > 0 && (X[i] != 0))
{
X[i] = 0;
i--;
}
if (i > 0)
{
X[i] = 1;
int S = 0;
for (i = 1; i <= n; i++)
{
S = S + A[i] * X[i];
}
Code chi tiết: Tải về
Bài 8.Cho xâu kí tự S.Hãy tìm kí tự xuất hiện nhiều nhất
VD: S[]="ABCDABBB"
Output:
B 4
Code:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char A[100], B[100];
cin>> A;
int n = strlen(A);
for (int i = 0; i < n; i++)
{
B[i] = 1;
}
int C[100];
for (int i = 0; i < n; i++)
{
C[i] = 1;
if (B[i])
{
B[i] = 0;
for (int j = i + 1; j < n; j++)
{
if (A[i] == A[j])
{
B[j] = 0;
C[i]++;
}
}
}
}................................
Code chi tiết: Tải về
Bài 9.Viết chương trình xây dựng các thao tác trên đa thức.
Code:
//Pn(x),Qm(x).
#include"stdafx.h"
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int n,m;
int A[100], B[100];//A[] mag cac he so cua P,B[] mag cac he so cua Q
void nhap()
{
int i;
cout << "Nhap bac cua P(x): ";
cin >> n;
cout << "Nhap he so P(x): ";
for (i = 0; i <=n; i++)
{
cin >> A[i];
}
cout << "Nhap bac cua Q(x): ";
cin >> m;
cout << "Nhap he so cua Q(x): ";
for (i = 0; i <= m; i++)
{
cin >> B[i];
}
}
void b()
{
int x0,x1=0,i;
cout << "Nhap x0: ";
cin >> x0;
cout << "Pn(x0)= ";
for (i = 0; i <= n; i++)
{
x1 = x1 + A[i] * (int)pow(x0, n - i);
}
cout << x1 << endl;
}
void daoham()
{
int i;
cout << "Dao ham cua Pn(x) la: ";
for (i = 0; i < n; i++)
{
cout << (n - i)*A[i] << "*x^" << (n - 1 - i)<<"+";
if (i == n - 1)
{
cout << "0";
}
}
cout << endl;
}......................
Code chi tiết: Tải về
Bài10. Viết chương trình tính tích 2 ma trận M,N
Code:
Bài10. Viết chương trình tính tích 2 ma trận M,N
Code:
// codetrenblog.cpp : Defines the entry point for the console application.
#include"stdafx.h"
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int hangA, cotA, hangB, cotB;
int A[100][100], B[100][100];
int matrantich[20][20];
void nhap()
{
int i, j;
cout << "Ma tran A cap: ";
cin >> hangA >> cotA;
cout << "Nhap ma tran A: ";
for (i = 0; i < hangA; i++)
{
for (j = 0; j < cotA; j++)
{
cin >> A[i][j];
}
}
cout << "Ma tran B cap: ";
cin >> hangB >> cotB;
cout << "Nhap ma tran B: ";
for (i = 0; i < hangB; i++)
{
for (j = 0; j < cotB; j++)
{
cin >> B[i][j];
}
}
}
void tichmatran()
{
int i, j,k;
for (i = 0; i < hangA; i++)
{
for (j = 0; j < cotB; j++)
{
matrantich[i][j] = 0;
for (k = 0; k < cotA; k++)
{
matrantich[i][j] += A[i][k] * B[k][j];
}
}
}...............
Code chi tiết: Tải về
Bài 11.Hình chữ nhật gồm m*n hình vuông đơn vị
Hình chữ nhật gồm m*n hình vuông đơn vị.Hãy liệt kê tất cả các đường đi từ ô cuối cùng góc trái đến ô trên cùng góc phải. Biết mỗi bước đi chỉ đi được 1 đơn vị
Code:
/*Hinh chữ nhật gồm m*n hình vuông đơn vị.Hãy liệt kê tất cả các đường đi từ ô cuối cùng góc trái đến ô trên cùng góc phải.
Biết mỗi bước đi chỉ đi được 1 đơn vị.*/
#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;
int A[100], OK = true, n, m;
void Init()
{
cout << "Nhap so hang don vi: ";
cin >> m;
cout << "Nhap so cot don vi: ";
cin >> n;
for (int i = 1; i <= m + n; i++)
{
A[i] = 0;
}
}
void Result()
{
for (int i = 1; i <= n + m; i++)
{
cout << setw(3) << A[i];
}
cout << endl;
}
........................
Code chi tiết: Tải về
Bài 11.Hoán vị pp quay lui(Liệt kê hoán vị dãy 1.....n)
Code:
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int n, A[100],chuaxet[100];
void Init()
{
cout << "Nhap n: ";
cin >> n;
for (int i = 1; i <= n; i++)
{
chuaxet[i] = true;
}
}
void Result()
{
for (int i = 1; i <= n; i++)
{
cout << setw(3) << A[i];
}
cout << endl;
}
void Hoanvi(int i)
{
for (int j = 1; j <= n; j++)
{
if (chuaxet[j])
{
A[i] = j;
chuaxet[j] = false;
if (i == n)
{
Result();
}
else
{
Hoanvi(i + 1);
}
chuaxet[j] = true;
}
}
}
int main()
{
Init();
Hoanvi(1);
return 0;
}
Bài 12.Cho dãy số A[n]=(a1,a2,.....,an).Hãy liệt kê tất cả các dãy số có thể
tạo ra từ dãy An bằng cách tráo đổi các phần tử khác nhau sao cho tổng
2 phần tử liên tiếp bất kỳ đều là một số nguyên tố
Input: Output:
n=6 9,8,5,12,7,6
An=(9,7,12,8,6,5)
Code:
#include"stdafx.h"
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int chuaxet[100], n, A[100],B[100];
int ngto(int n)
{
int i;
if (n == 1 || n == 0) return 0;
if (n == 2) return 1;
else
{
for (i = 2; i < n; i++)
{
if (n%i == 0)
{
return 0;
}
}
return 1;
}
}
void Init()
{
int i;
cout << "Nhap n: ";
cin >> n;
cout << "Nhap lan luot cac phan tu: ";
for (i = 1; i <= n; i++)
{
cin >> A[i];
}
for (i = 1; i <= n; i++)
{
chuaxet[i] = true;
}
}
void Result()
{
int i;
for (i = 1; i <= n; i++)
{
cout << setw(3) << B[i];
}
cout << endl;
}
........................
Code chi tiết: Tải về
Bài 12.
Bài 11.Hình chữ nhật gồm m*n hình vuông đơn vị
Hình chữ nhật gồm m*n hình vuông đơn vị.Hãy liệt kê tất cả các đường đi từ ô cuối cùng góc trái đến ô trên cùng góc phải. Biết mỗi bước đi chỉ đi được 1 đơn vị
Code:
/*Hinh chữ nhật gồm m*n hình vuông đơn vị.Hãy liệt kê tất cả các đường đi từ ô cuối cùng góc trái đến ô trên cùng góc phải.
Biết mỗi bước đi chỉ đi được 1 đơn vị.*/
#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;
int A[100], OK = true, n, m;
void Init()
{
cout << "Nhap so hang don vi: ";
cin >> m;
cout << "Nhap so cot don vi: ";
cin >> n;
for (int i = 1; i <= m + n; i++)
{
A[i] = 0;
}
}
void Result()
{
for (int i = 1; i <= n + m; i++)
{
cout << setw(3) << A[i];
}
cout << endl;
}
........................
Code chi tiết: Tải về
Bài 11.Hoán vị pp quay lui(Liệt kê hoán vị dãy 1.....n)
Code:
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int n, A[100],chuaxet[100];
void Init()
{
cout << "Nhap n: ";
cin >> n;
for (int i = 1; i <= n; i++)
{
chuaxet[i] = true;
}
}
void Result()
{
for (int i = 1; i <= n; i++)
{
cout << setw(3) << A[i];
}
cout << endl;
}
void Hoanvi(int i)
{
for (int j = 1; j <= n; j++)
{
if (chuaxet[j])
{
A[i] = j;
chuaxet[j] = false;
if (i == n)
{
Result();
}
else
{
Hoanvi(i + 1);
}
chuaxet[j] = true;
}
}
}
int main()
{
Init();
Hoanvi(1);
return 0;
}
Bài 12.Cho dãy số A[n]=(a1,a2,.....,an).Hãy liệt kê tất cả các dãy số có thể
tạo ra từ dãy An bằng cách tráo đổi các phần tử khác nhau sao cho tổng
2 phần tử liên tiếp bất kỳ đều là một số nguyên tố
Input: Output:
n=6 9,8,5,12,7,6
An=(9,7,12,8,6,5)
Code:
#include"stdafx.h"
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int chuaxet[100], n, A[100],B[100];
int ngto(int n)
{
int i;
if (n == 1 || n == 0) return 0;
if (n == 2) return 1;
else
{
for (i = 2; i < n; i++)
{
if (n%i == 0)
{
return 0;
}
}
return 1;
}
}
void Init()
{
int i;
cout << "Nhap n: ";
cin >> n;
cout << "Nhap lan luot cac phan tu: ";
for (i = 1; i <= n; i++)
{
cin >> A[i];
}
for (i = 1; i <= n; i++)
{
chuaxet[i] = true;
}
}
void Result()
{
int i;
for (i = 1; i <= n; i++)
{
cout << setw(3) << B[i];
}
cout << endl;
}
........................
Code chi tiết: Tải về
Bài 12.
Cho số tự nhiên N. Hãy viết chương trình chuyển đổi số tự nhiên n thành số ở hệ cơ số b (2<=b<=32).
Dữ liệu vào
(Input) cho bởi file
data.txt theo khuôn dạng:
•Dòng đầu tiên ghi lại số tự nhiên K là số lượng các test
(k<=100).
• K dòng kế tiếp ghi lại mỗi dòng một
test. Mỗi test
bao gồm một cặp số N,
b. Hai số được viết cách nhau một vài khoảng trống.
Kết quả ra
(Output): ghi lại K dòng trong file Output.txt, mỗi dòng ghi lại bộ ba số n,
k, x. Trong đó x là số ở hệ cơ số b được chuyển đổi từ n. Ví dự dưới đây minh
họa cho file
input và
output của bài toán.
Input.txt Output.txt
5
8 2 8 2 1000
32 16 32 16 20
255 16 255 16 FF
100 10 100 10 100
64 32 64 32 20
Code:
#include<iostream>
#include<cmath>
#include<string>
#include<fstream>
using namespace std;
int main()
{
ifstream FileIn;
FileIn.open("C:\\Users\\VIET HOANG\\Desktop\\Input.txt");
int n;
FileIn >> n;
int A[100][100],B[100][100];
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= 2; j++)
{
FileIn >> A[i][j];
B[i][j] = A[i][j];
}
}
FileIn.close();
Code chi tiết: Tải về
Bài 12.Cho hai file Data1.in và Data2.in. Hãy viết chương trình tập từ và số lần xuất hiện mỗi từ của cả hai file. Ví dụ dưới đây sẽ minh họa cho Inpu và Output của bài toán.
Bài 12.Cho hai file Data1.in và Data2.in. Hãy viết chương trình tập từ và số lần xuất hiện mỗi từ của cả hai file. Ví dụ dưới đây sẽ minh họa cho Inpu và Output của bài toán.
Data1.in Data2.in
AB
AC AD AE AF AB
AC AD AG AH
AB
AC AD AE AF AB
AC AD AG AH
Ketqua.out
7
AB 4
AC 4
AD 4
AE 2
AF 2
AG 2
AH 2
Code:
Code chi tiết:Tải về
- #include<iostream>
- #include <string.h>
- using namespace std;
- #define MAX 1000
- #define MAXLENGTH 20
- struct TU
- {
- char noidung[MAXLENGTH];
- int dem;
- };
- TU danhsach[MAX];
- int main()
- {
- int sophantu = 0,sophantufile1=0;
- char phantufile1[MAXLENGTH];
- //B1:Copy file 1 sang file 2
- ifstream File1;
- File1.open("C:\\Users\\VIET HOANG\\Desktop\\Data1.in", ios_base::in);
- ofstream File2;
- File2.open("C:\\Users\\VIET HOANG\\Desktop\\Data2.in", ios_base::app);
- char line[255];
- while (!File1.eof()) { //Lap den cuoi file
- File1.getline(line, 80);//doc mot dong
- cout<<line<<endl;//dua ra noi dung f1
- File2<<" "<<line<<endl; //ghi dong line vao f2;
- }
- File1.close();//dong file f1
- File2.close();//dong file f2
- //B2:Tim so lan xuat hien cac tu trong 1 file File2
- char temp[MAXLENGTH];
- bool timthay;
- ifstream FileIn;
- FileIn.open("C:\\Users\\VIET HOANG\\Desktop\\Data2.in", ios_base::in);
- while (!FileIn.eof())
- {
- timthay = false;
- FileIn >> temp;
- for (int i = 0; i < sophantu; i++)
- {
- if (strcmp(danhsach[i].noidung, temp) == 0)//copy temp sang mot mang
- {
- danhsach[i].dem++;
- timthay = true;
- break;
- }
- }
- if (!timthay)
- {
- strcpy(danhsach[sophantu].noidung, temp);
- danhsach[sophantu].dem = 1;
- sophantu++;
- }
- }
- FileIn.close();
Bai tap lap trinh c++ qua hay di, cam on admin
Trả lờiXóaCảm ơn bạn đã ủng hộ blog nhé!
Xóa