Minimalist Simple annual report Họ và tên Nguyễn Thị Yến Nguyễn Thị Khánh Vân Nguyễn Bích Ngọc Trần Ngọc Châu Đặng Thị Mỹ Tâm 1 2 3 4 5 Nhóm học phần (BT) Nhóm 13 (01) Bài lập trình Số 1 Môn Toán rời[.]
Trang 1Họ và tên
Nguyễn Thị Yến Nguyễn Thị Khánh Vân Nguyễn Bích Ngọc
Trần Ngọc Châu Đặng Thị Mỹ Tâm
1.
2.
3.
4.
5.
Điểm
Trang 2ĐỀ BÀI 1
Cho hình vuông gồm 25 hình vuông đơn vị Hãy điền các số từ 0 đến
9 vào mỗi hình vuông đơn vị sao cho những điều kiện sau được thỏa mãn:
Đọc từ trái sang phải theo hàng ta nhận được 5 số nguyên tố có
5 chữ số;
Đọc từ trên xuống dưới theo cột ta nhận được 5 số nguyên tố có
5 chữ số;
Đọc theo hai đường chéo chính ta nhận được 2 số nguyên tố có
5 chữ số;
Tổng các chữ số trong mỗi số nguyên tố đều là S cho trước.
Ví dụ hình vuông dưới đây với S = 11.
Trang 3SƠ ĐỒ KHỐI - HÀM SINH
start b[100000]
kiểm tra S ( S>45 || S<1
)
nhập tổng S
X[dem]
chọn x thuộc X
thực hiện việc điền
kiểm tra các cột từ 2 đến 4
in ô vuông 5x5 end
yes
no
yes
no
Thêm nội dung văn bản mảng lưu các số nguyên tố < 100000
mảng lưu các số nguyên tố 5c/số, tổng các chữ số = S, có dem
phần tử
chọn một số bất kì thuộc X, có các chữ
số khác 0
hàm điền
các số thuộc X
Trang 4SƠ ĐỒ KHỐI - HÀM ĐIỀN
start điền x hàng 1 vào
điền cột 1
điền chéo phụ
điền chéo chính
điền hàng 5
điền hàng 4
điền hàng 2
điền hàng 3
end
các chữ số của x khác 0
ktra chữ số đầu tiên và chữ số cuối cùng của x trùng ô 9, ô 5
ktra số đầu tiến của x
trùng ô 1, chữ số khác 0
ktra chữ số đầu tiên
của x trùng với ô 1 và
chữ sô thứ 3 trùng 0
ktra chữ số đầu của x trùng ô 9, chữ số cuối trùng ô 15
ktra chữ số đấu của x trùng ô 6, chữ số 2 trùng
ô 13, chữ số 4 trùng ô 12
ktra chữ số đầu của x
trùng ô 8, chữ số thứ 2
trùng ô 10, chữ số thứ 4
trùng ô 12
ktra chữ số đầu tiên
trùng ô 7, chữ số thứ 3
trùng ô 11
Trang 5BÀI CODE
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int b[100001]; // mang so nguyen to tu 0 - 100000
void sang() // sang so nguyen to va luu vao mang b
{
for (int i = 0; i <= 100000; i++)
b[i] = 1;
b[0] = b[1] = 0;
for (int i = 2; i <= sqrt(100000); i++)
for (int j = i * i; j <= 100000; j += i)
b[j] = 0;
}
int tng(int n) // tinh tong cac chu so
{
int t = 0;
while (n > 0)
{
t += n % 10;
n /= 10;
}
return t;
}
int check(int n) // kiem tra so co ton tai chu so 0 hay khong
{
while (n > 0)
{
if (n % 10 == 0)
return 0;
n /= 10;
}
return 1;
}
int checkcs(int n)// kiem tra co ton tai chu so chia het cho 2 hoac 5 hay khong {
while (n > 0)
{
int c = n % 10;
if (c % 2 == 0 || c == 5)
return 0;
Trang 6n /= 10;
}
return 1;
}
int a[10][10], s[10000];
void dienngang(int x, int a[][10], int b) // dien hang ngang b {
for (int i = 4; i >= 0; i )
{
a[b][i] = x % 10;
x /= 10;
}
}
void diendoc(int x, int a[][10], int b) // dien cot doc b
{
for (int i = 4; i >= 0; i )
{
a[i][b] = x % 10;
x /= 10;
}
}
int dem = 0;
int v[10000] = {0};
int checkv() // kiem tra da duyet qua so nay hay chua
{
for (int i = 0; i < dem; i++)
if (v[i] == 0)
return 1;
return 0;
}
int tong;
int main()
{
sang();
srand(time(NULL));
int n;
Moretime:
int ok = 0;
memset(v, 0, sizeof(v));
dem = 0;
Trang 7do
{
cout<<"Nhap tong: ";
cin >> tong;
} while (tong > 45 || tong < 1);
for (int i = 10000; i <= 99999; i++) // mang snt co tong cs = s;
if (tng(i) == tong && b[i] == 1)
{
s[dem] = i;
dem++;
}
if (dem == 0)
{
cout << "KO CO SO NAO LA SNT VA CO TONG CHU SO BANG TONG" << endl; goto Moretime;
}
while (1)
{
int c = 0;
for (int i = 0; i < dem; i++)// ktra cs 0
if (check(s[i]))
c = 1;
if (c == 0)
{
cout << "KHONG CO SO NAO THOA MAN CHO HANG 1"<<endl;
goto Moretime;
}
int i = rand() % dem;
while (1)
{
if (v[i] == 0 && check(s[i])) // ktra ham random da duyet qua so nay chua, tuong tu mang dem;
{
v[i] = 1;
break;
}
v[i] = 1; // da duyet qua danh 1
if (checkv() == 0)
{
cout << "DA KIEM TRA HET TAT CA TRH VA KHONG CO KET QUA THOA MAN"<<endl;
goto Moretime;
Trang 8}
i = rand() % dem;
}
n = s[i];
dienngang(n, a, 0);
for(int i0 = 0; i0 < dem; i0++)
{
if(s[i0] / 10000 == a[0][0] && check(s[i0]))
{
n = s[i0];
diendoc(n, a, 0);
for (int i1 = 0; i1 < dem; i1++) // cheo phu
{
if ((s[i1] % 10 == a[0][4] && s[i1] / 10000 == a[4][0]))
{
n = s[i1];
for (int i11 = 0; i11 <= 4; i11++)
{
a[i11][4 - i11] = n % 10;
n /= 10;
}
for (int i2 = 0; i2 < dem; i2++) // cheo chinh
{
if ((s[i2] / 10000 == a[0][0] && (s[i2] % 1000) / 100 == a[2][2]))
{
n = s[i2];
for (int j22 = 4; j22 >= 0; j22 )
{
a[j22][j22] = n % 10;
n /= 10;
}
for (int i6 = 0; i6 < dem; i6++) // ngang 4
{
if (checkcs(s[i6]) && s[i6] / 10000 == a[4][0] && s[i6] % 10 == a[4][4]) {
n = s[i6];
dienngang(n, a, 4);
if (a[0][1] + a[4][1] > tong || a[0][2] + a[4][2] > tong || a[0][3] + a[4][3] > tong || a[0][4] + a[4][4] > tong)
continue;
for (int i5 = 0; i5 < dem; i5++) // ngang 3
Trang 9{
if ((s[i5] / 10000 == a[3][0] && (s[i5] % 10000) / 1000 == a[3][1] && (s[i5] % 100) / 10 == a[3][3]))
{
n = s[i5];
dienngang(n, a, 3);
if (a[0][1] + a[4][1] + a[3][1] > tong || a[0][2] + a[4][2] + a[3][2] > tong || a[0][3] + a[4][3] + a[3][3] > tong || a[0][4] + a[4][4] + a[3][4] > tong)
continue;
for (int i3 = 0; i3 < dem; i3++) // ngang 1
{
if ((s[i3] / 10000 == a[1][0] && (s[i3] % 10000) / 1000
== a[1][1] && (s[i3] % 100) / 10 == a[1][3]))
{
n = s[i3];
dienngang(n, a, 1);
if (a[0][1] + a[4][1] + a[3][1] + a[1][1] > tong || a[0] [2] + a[4][2] + a[3][2] + a[1][2] > tong || a[0][3] + a[4][3] + a[3][3] + a[1][3] > tong || a[0][4] + a[4][4] + a[3][4] + a[1][4] > tong)
continue;
for (int i4 = 0; i4 < dem; i4++) // ngang 2
{
int check = 1;
if (s[i4] / 10000 == a[2][0] && (s[i4] % 1000) / 100
== a[2][2])
{
n = s[i4];
dienngang(n, a, 2);
if (a[0][1] + a[4][1] + a[3][1] + a[1][1] + a[2][1]
!= tong || a[0][2] + a[4][2] + a[3][2] + a[1][2] + a[2][2] != tong || a[0][3] + a[4][3] + a[3][3] + a[1][3] + a[2][3] != tong || a[0][4] + a[4][4] + a[3][4] + a[1][4] + a[2][4]
!= tong)
continue;
for (int j = 1; j < 5; j++) // kiem tra cac cot co thoa man la so nguyen to, tong chu so la s
{
int t = 0;
for (int i = 0; i < 5; i++)
t = t * 10 + a[i][j];
if (b[t] == 0)
Trang 10{
check = 0; break; }
}
if (check == 1) {
cout << " - HINH VUONG TIM DUOC LA -\n"; for (int i18 = 0; i18 < 5; i18++) {
cout << " ";
for (int j19 = 0; j19 < 5; j19++) cout << a[i18][j19] << " "; cout << "\n"; }
goto Moretime; }
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
Trang 11KẾT QUẢ
Trang 12ĐỀ BÀI 2
Liệt kê (duyệt) các xâu nhị phân có độ dài n.
Xâu X=(X1X2 Xn): Xi = 0,1; i = 1,2, ,n được gọi là xâu nhị phân có độ dài n Ví dụ với n = 4, ta có 16 xâu nhị phân.
start nhập n bit
khởi tạo cấu hình đầu tiên cho a[j]=0 sinh
chuyển thành 0, dịch sang trái
in cấu hình hiện tại
gặp 1
gặp 1
end
sinh
in cấu hình cuối cùng và dừng
SƠ ĐỒ KHỐI
true
false
false
true
khởi tạo cấu hình đầu tiên cho a[i]=0
sinh cấu hình kế tiếp bắt đầu từ bit cuối cùng đi tìm bit 0 đầu tiên
Trang 13BÀI CODE
#include<bits/stdc++.h>
using namespace std;
int n,a[100],ok;
void ktao(){
//kien tao cau hinh dau tien
for(int i=1;i<=n;i++){
a[i]=0;
}
}
void sinh(){
for(int i=1;i<=n;i++){
cout<<a[i]; //in cau hinh hien tai
}
cout<<endl;
int i=n;
while(i>=1&&a[i]==1){
a[i]=0;
i;
//bat dau tu bit cuoi cung, di tim bit 0 dau tien
}
if(i==0){
ok=0; //day la cau hinh cuoi cung
}
else{
a[i]=1;
}
}
int main(){
cin>>n;
ok=1;
ktao();
while(ok){
sinh(); //sinh cau hinh ke tiep, xuat hien cau hinh cuoi cung thi dung }
return 0;
}
Trang 14KẾT QUẢ