Uploaded by Tiên Trần

22-23(3)

advertisement
Page không dành cho sinh viên I.T trường Ú
GIẢI THAM KHẢO ĐỀ KẾT THÚC HỌC PHẦN – ĐH KHTN
NHẬP MÔN LẬP TRÌNH
(Năm học: 2022-2023)
_____________________________________________________________________________
Lưu ý: Thời điểm mình giải đề này (12/2023) mình cũng đang là sinh viên năm nhất, cũng đang
cảm thấy rất “chênh vênh” về kì thi KTHP sắp tới và chưa được học những cú pháp, những hàm
cao siêu gì, mình chỉ muốn giải để ôn thi cũng như đăng tải lên Studocu để lưu trữ thôi (nhưng hi
vọng mấy bài giải sơ cấp này có thể giúp được cho bạn nào đó :>). Ngôn ngữ mình sử dụng là
C++. Mọi bài giải đều hướng đến một mục tiêu duy nhất là ra đáp án, do đó, bỏ qua các bước tối
ưu bộ nhớ, tối ưu thời gian,.... Bài giải có thể chứa lỗi mà mình chưa dò ra. Hầu hết các bài đều
yêu cầu viết hàm nhưng mình sẽ viết luôn chương trình để tiện kiểm tra nhé!
_____________________________________________________________________________
Câu 1:
Giải
#include <string>
#include <iostream>
using namespace std;
int strcmp(string s1, string s2)
{
if (s1 > s2)
{
return 1;
}
else if (s1 < s2)
{
return 2;
}
else
{
return 0;
04/01/2024
1
Page không dành cho sinh viên I.T trường Ú
}
}
int main()
{
string s1, s2;
cout << "Nhap chuoi 1: ";
getline(cin, s1);
cout << "Nhap chuoi 2: ";
getline(cin, s2);
int kq = strcmp(s1, s2);
if (kq == 1)
{
cout << "Chuoi " << s1 << " lon hon." << endl;
}
else if (kq == 2)
{
cout << "Chuoi " << s2 << " lon hon." << endl;
}
else if (kq == 0)
{
cout << "Hai chuoi bang nhau." << endl;
}
return 0;
}
Câu 2:
Giải
#include <iostream>
using namespace std;
void nhapMang(int a[][20], int m, int n)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
}
void xuatMang(int a[][20], int m, int n)
{
04/01/2024
2
Page không dành cho sinh viên I.T trường Ú
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
}
/* Ý TƯỞNG: Cho vòng lặp lấy từng phần tử trong mảng rồi:
* Kiểm tra có lớn nhất dòng không?
* Kiểm tra có lớn nhất cột không?
* Kiểm tra có lớn nhất hai đường chéo không? Bằng cách:
* - Tăng phải;
* - Giảm trái;
* - Tăng trái
* - Giảm phải;
*/
bool ktHoangHau(int a[][20], int m, int n, int vtdong, int vtcot)
{
int max = a[vtdong][vtcot];
int dem = 0;
for (int i = 0; i < n; i++)
{
if (a[vtdong][i] < max)
{
dem++;
}
}
if (dem != n - 1)
{
return false;
}
else
{
dem = 0;
}
for (int i = 0; i < m; i++)
{
if (a[i][vtcot] < max)
{
dem++;
}
}
if (dem != m - 1)
{
return false;
}
int vtdong1 = vtdong + 1;
int vtcot1 = vtcot + 1;
while (vtdong1 < m && vtcot1 < n)
{
if (a[vtdong1][vtcot1] > max)
{
return false;
}
04/01/2024
3
Page không dành cho sinh viên I.T trường Ú
vtdong1++;
vtcot1++;
}
vtdong1 = vtdong - 1;
vtcot1 = vtcot - 1;
while (vtdong1 >= 0 && vtcot1 >= 0)
{
if (a[vtdong1][vtcot1] > max)
{
return false;
}
vtdong1--;
vtcot1--;
}
vtdong1 = vtdong - 1;
vtcot1 = vtcot + 1;
while (vtdong1 >= 0 && vtcot1 < n)
{
if (a[vtdong1][vtcot1] > max)
{
return false;
}
vtdong1--;
vtcot1++;
}
vtdong1 = vtdong + 1;
vtcot1 = vtcot - 1;
while (vtdong1 <m && vtcot1 >=0)
{
if (a[vtdong1][vtcot1] > max)
{
return false;
}
vtdong1++;
vtcot1--;
}
return true;
}
int main()
{
int a[20][20], m = 0, n = 0;
cout << "Nhap so dong: ";
cin >> m;
cout << "Nhap so cot: ";
cin >> n;
nhapMang(a, m, n);
cout << endl;
xuatMang(a, m, n);
int dem = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (ktHoangHau(a, m, n, i, j) == true)
{
dem++;
}
04/01/2024
4
Page không dành cho sinh viên I.T trường Ú
}
}
if (dem == 0)
{
cout << "Khong co phan tu Hoang Hau." << endl;
}
else
{
cout << "Co " << dem << " phan tu hoang hau." << endl;
}
return 0;
}
Câu 3:
Giải
#include <iostream>
using namespace std;
void nhapMang(int a[], int &n)
{
srand(time(0));
for (int i = 0; i < n; i++)
{
a[i] = -10 + rand() % (100 + 1 - (-10));
}
}
void xuatMang(int a[], int n)
{
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
}
// Ý TƯỞNG
// Cho toàn bộ phần tử của mảng thứ 2 vào cuối mảng thứ 1, sau đó sắp xếp theo thứ
tự từ bé đến lớn.
void HoanVi(int& x, int& y)
{
04/01/2024
5
Page không dành cho sinh viên I.T trường Ú
int tmp = x;
x = y;
y = tmp;
}
void sapxepTangDan(int a[], int n1)
{
for (int i = 0; i < n1 - 1; i++)
{
for (int j = i+1; j < n1; j++)
{
if (a[i] > a[j])
{
HoanVi(a[i], a[j]);
}
}
}
xuatMang(a, n1);
}
int main()
{
int a[100], b[100], n1 = 0, n2 = 0;
cout << "Nhap so luong phan tu cua mang 1: ";
cin >> n1;
nhapMang(a, n1);
sapxepTangDan(a, n1);
cout << endl;
cout << "Nhap so luong phan tu cua mang 2: ";
cin >> n2;
nhapMang(b, n2);
sapxepTangDan(b, n2);
cout << endl;
int j = 0;
for (int i = n1; i < n1 + n2; i++)
{
a[i] = b[j++];
}
n1 = n1 + n2;
sapxepTangDan(a, n1);
return 0;
}
04/01/2024
6
Download