Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 13

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

BÀI BÁO CÁO


TOÁN RỜI RẠC 1
Họ và tên: 1. Nguyễn Thị Chi
2. Đinh Văn Bình
3. Dương Đức Ngọc
4. Khúc Minh Quân
5. Nguyễn Ngọc Tân
Nhóm học phần (BT): Nhóm 13 (04)

Bài lập trình: Số 1


Môn: Toán rời rạc 1
Giảng viên: Nguyễn Thị Mai Trang

Ngày: 06/10/2023
Điểm:
Bài 1:

Đề bài: 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:
a) Đọc từ trái sang phải theo hàng ta nhận được 5 số nguyên tố có 5 chữ số;
b) Đọ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) Đọc theo hai đường chéo chính ta nhận được 2 số nguyên tố có 5 chữ số;
d) 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.

3 5 1 1 1
5 0 0 3 3
1 0 3 4 3
1 3 4 2 1
1 3 3 1 3
1.1 Sơ đồ khối

1 2 3 4 5

6 13 16 12 17

7 18 11 20 21

8 10 22 14 24

9 19 23 25 15

Sơ đồ khối Hàm điền số:

Bắt đầu

Lấy x  X[k]

i=0

sai
i<k i++

đúng

Kiểm tra x có
thỏa mãn
sai
Các ô cần diền

đúng

Điền x vào hình


vuông

End
Bắt đầu

Nhập S

Kiểm tra
Đúng S<1 || S>45 ||
d S ko nghiệm
là snt

Sai
X gồm k phần tử là
snt có S c/s , tổng = S
X [k]

x X có chứa 0
Điền hàng 1 cột 1

xX có c/s đầu  ô 9 , c/s


câu  ô 5
Điền chéo phụ

xX có c/s đầu  ô 1 , c/s


Điền chéo chính thứ 3  ô 11

xX có c/s thứ 1  ô 6 ,thứ


Điền hàng 2 cột 2
2  ô 13 ,thứ 3  ô 12

Điền hàng 3 cột 3 xX có c/s thứ 1  ô 7,thứ


2  ô 18, thứ 3  ô 11

Điền hàng 4 cột 4


xX có c/s thứ 1  ô 8,thứ 2  ô
10, thứ 3  ô 22,thứ 3  ô 22,thứ

Sai Kiểm tra ma


Nt các số tạo thành là
trận có thỏa snt , tổng = S
mãn

Đúng

In hv 5x5

End
1.1Sơ đồ khối
Thứ tự điền số
1 2 3 4 5

6 13 16 12 17

7 18 11 20 21

8 10 22 14 24

9 19 23 25 15

Sơ đồ khối Hàm xử lý:


Bắt đầu

Điền x vào hàng 1 cột 1


Nt X có chứa 0

Điền đường chéo phụ Nt xX có c/s đầu  ô 9 , c/s


câu  ô 5

Điền đường chéo chính Nt xX có c/s đầu  ô 1 , c/s


thứ 3  ô 11

Điền hàng 2 cột 2 Nt xX có c/s thứ 1  ô


6 ,thứ 2  ô 13 ,thứ 3  ô 12

Điền hàng 3 cột 3 Nt xX có c/s thứ 1  ô 7,thứ


2  ô 18, thứ 3  ô 11

Điền hàng 4 cột 4 Nt xX có c/s thứ 1  ô 8,thứ


2  ô 10, thứ 3  ô 22,thứ 3 
ô 22,thứ 4  ô 14

Kết thúc
Bắt đầu

Nhập S

Kiểm tra
Đúng S<1 || S>45 ||
d S nghiệm là
snt

Sai
X gồm các phần tử là
X [u] snt có S c/s , tổng = S

xX Lấy x thuộc tập X

Hàm xử lý

Sai Kiểm tra ma Nt các số tạo thành là


trận có thỏa snt , tổng = S
mãn

Đúng
In hv 5x5

End
1.2 Chương trình ngôn ngữ C++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int x[100000];
void nguyento(){
for(int i=0; i< 100000;i++)
x[i] = 1;
x[0] = 0;
x[1] = 0;
for(int i=2;i<=sqrt(100000);i++)
for(int j= i*i; j<= 100000; j+= i)
x[j] = 0;
}

int tongcs(int n){


int s=0;
while(n>0){
s += n%10;
n /= 10;
}
return s;
}//tong chu so

int ktrahang0(int n){


while(n>0){
int k= n%10;
if (k==0) return 0;
n /= 10;
}
return 1;
}
void hang(int a[][5], int hang, int k){
for(int i=4; i>=0; i--){
a[hang][i] = k%10;
k/=10;
}
}
void cot(int a[][5], int cot, int k){
for(int i=4; i>=0; i--){
a[i][cot] = k%10;
k/=10;
}
}
int tonghang(int a[][5],int n){
int t=0;
for(int i=0;i<=4;i++){
t+=a[n][i];
}
return t;
}
int main(){
int b[10005];
nguyento();
int s,n;
int k=0,h=0;
int a[5][5]={0};
cout << "--Tong nguyen to S la: ";
cin >> s;
if (1>s || s>43 || x[s]==0)
cout<<" Gia tri S khong thoa man de bai!!!\n";
else{
for(int i=10000;i<100000;i++){
if(tongcs(i)==s && x[i]==1){
b[k]=i;
k++;
}
}
for(int i=0;i<k;i++){
if(ktrahang0(b[i])){
n=b[i];
hang(a,0,n); cot(a,0,n);//hang0,cot0
for(int i0=0;i0<k;i0++){//cheo phu
if(b[i0]%10 == a[0][4] && b[i0]/10000 == a[4][0]){
n=b[i0];
for (int j0=0; j0<=4;j0++){
a[j0][4-j0] = n%10;
n /= 10;
}
for(int i1=0;i1<k;i1++){//cheo chinh
if((b[i1]/100)%10 == a[2][2] && b[i1]/10000 == a[0][0]){
n = b[i1];
for (int j1=4; j1>=0;j1--){
a[j1][j1] = n%10;
n /= 10;
}
for(int i2=0;i2<k;i2++){//1
if(b[i2]/1000 == a[1][0]*10+a[1][1]&&(b[i2]/10)%10 == a[1][3]){
n = b[i2];
hang(a,1,n); cot(a,1,n);
for(int i3=0;i3<k;i3++)
{//2

if(b[i3]/100==a[2][0]*100+a[2][1]*10+a[2][2]){

n=b[i3];

hang(a,2,n); cot(a,2,n);

for(int i4=0;i4<k;i4++){//3

if(b[i4]/10==a[3][0]*1000+a[3][1]*100+a[3][2]*10+a[3][3]){

n=b[i4];

int ok =1;

hang(a,3,n); cot(a,3,n);

if(tonghang(a,4)!=s) ok=0;

for(int j0=1;j0 <5;j0++){

int q=0;

for(int j=0;j<5;j++){

q=q*10+a[j0][j];

if(x[q]==0)

ok =0;

break;
}

if(ok==1){

h++;

for (int i5 = 0; i5 < 5; i5++){


for (int j5 = 0;
j5 < 5; j5++){
cout << " "<<a[i5][j5];

}
cout << endl;

}return 0;

}
}
}
}
}
}
}
}
}
}
}
}
if(h==0) cout<<" Khong co ket qua phu hop voi tong s vua nhap!!\n";
}
}
1.3 Kết quả
Bài 2:
Đề bài: Liệt kê các xâu nhị phân có độ dài n.
2.1 Sơ đồ khối
Start

Nhập n

Khởi tạo xâu S Là xâu nhị phân


Là cấu hình đầu tiên Gồm n chữ số 0

In Xâu S
Duyệt xâu S từ phải
sang trái .
Sai Gán chữ só 0 đấu tiên
Sinh cấu hình kế tiếp thành 1 và tất cả chữ sô
bên phải nó thành 0

In Xâu S

Kiểm tra
Sai XâuS có là Là xâu nhị phân
cấu hình cuối
Gồm n chữ số 1

Đúng

End
2.2 Chuong trình trên ngôn ngữ C++
#include <bits/stdc++.h>
using namespace std;
int ktxaucuoi(string s){
for(int i=0;i<s.length();i++){
if(s[i]==0) return 0;
}
return 1;
}
int main(){
cout<< " Nhap do dai xau: ";
int n; cin >>n;
cout << " Cac xau thoa man la: \n";2string s="";
while(n--){
s+="0";
}
cout <<" "<< s <<endl;
int ok =0;
while(ok==0){
lap:
ok=ktxaucuoi(s);
for(int i=s.length()-1;i>=0;i--){
if(s[i]=='0'){
s[i]='1';
for(int j=i+1;j<s.length();j++) s[j]='0';
cout << " "<<s <<endl;
goto lap;
}
}
}
}

2.3 Kết quả

You might also like