You are on page 1of 13

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 Nhóm 13(04)
(BT)
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
Bài 2:
Đề bài: Liệt kê các xâu nhị phân có độ dài n.
1.1 Sơ đồ khối:
Chú thích:
Thứ tự điền các ô:
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

Hàm nguyento() : khởi tạo mảng đánh dấu các vị trí là số nguyên tố
Hàm điền (1): Hàm duyệt các phần tử trong danh sách nguyên tố và điền phần tử
thỏa mãn vào hình vuông cần tìm.

Bắt đầu
Sơ đồ khối chương trình :
nguyento()

Nhập tổng: int S

Đúng Kiểm tra S<1 ||


d S>45|| S ko
nghiệm là snt

Sai

Tạo danh sách X [ ] X


gồm phần tử là snt có 5 c/s ,
tổng = S

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

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


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

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


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

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


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

(1) xX có c/s thứ 1  ô 7,thứ


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

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


10, thứ 3  ô 22,thứ 3  ô 22,thứ

Sai Kiểm tra có các số tạo thành là snt ,


thỏa mãn đề tổng = S
bài

Đúng

In hình vuông
5x5
Sơ đồ khối hàm điền (1):
End
(1)

Lấy 1 phần tử thuộc X:


Int i; i là chỉ số của phần tử x
trong X, x=X[0]

i <k sai
int k, k là tổng số
phần tử cảu mảng X

đúng

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

đúng

Điền x vào hình


vuông

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;

//mang danh dau cac phan tu co vi tri la so nguyen to

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 ktcothang4(int a[][5]){

int k=0,q=0;

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

k=k*10+a[i][4];

q=q*10+a[4][i];

if(x[k]!=1||x[q]!=1) return 0;

return 1;

int tonghang(int a[][5],int n){

int t=0;

for(int i=0;i<=4;i++){

t+=a[n][i];

return t;

int tongcot(int a[][5],int n){

int t=0;

for(int i=0;i<=4;i++){

t+=a[i][n];

return t;

int cheochinh(int a[][5]){

int k=0;

for (int j1=0; j1<=4;j1++){

k=k*10+a[j1][j1];

}return k;

int cheophu(int a[][5]){

int k=0;

for (int j0=0; j0<=4;j0++){

k=k*10+a[4-j0][j0];

}
return k;

int main(){

int b[10005];

nguyento();

int s,n;

int k=0,h=0;

cout << "--Tong nguyen to S la: ";

cin >> s;

while (1>s || s>43 || x[s]==0)

cout<<" Gia tri S khong thoa man de bai!!!\n";

cout << "--Nhap lai tong nguyen to S la: ";

cin >> s;

};int a[5][5]={0};

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++){//hang 1

if(ktrahang0(b[i])){

n=b[i];

hang(a,0,n);

for(int i9=0;i9<k;i9++){//cot 1

if(ktrahang0(b[i9])&&b[i9]/10000==a[0][0]){

n=b[i9];

cot(a,0,n);

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++){//hang 2

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);

for(int i8=0;i8<k;i8++){//cot 2

if(b[i8]/1000 == a[0][1]*10+a[1][1]&&(b[i8]/10)%10 == a[3][1]){

n = b[i8];

cot(a,1,n);

for(int i3=0;i3<k;i3++){//hang 3
if(b[i3]/100==a[2][0]*100+a[2][1]*10+a[2][2]){

n=b[i3];

hang(a,2,n);

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

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

n=b[i7];

cot(a,2,n);

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

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

n=b[i4];

hang(a,3,n);

for(int i6=0;i6<k;i6++){//cot 4

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

int ok =1; n=b[i6];

cot(a,3,n);

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

if(ktcothang4(a)==0) ok =0;
for(int j2=0;j2 <5;j2++){//kiem tra

if(x[tonghang(a,j2)]!=1) ok=0;
if(x[tongcot(a,j2)]!=1) ok=0; }

if(tongcs(cheophu(a))!=s||x[cheophu(a)]!=1) ok=0;

if(tongcs(cheochinh(a))!=s||x[cheochinh(a)]!=1) ok=0;

if(ok==1){
cout<<endl;

h++;

cout<<"\t Cau hinh thu "<< h<<" la:\n"


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

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

cout << " "<<a[i5][j5];


}

cout << endl;


}

}}}}}}}

}}

}if(h==0) cout<<" Khong co ket qua phu hop voi tong s vua nhap!!\n";

else cout << " So hinh thoa man la: "<<h; return 0;

}
1.3Kết quả
2.1 Sơ đồ khối
Check(S) : kiểm tra xâu S có phải cấu hình cuối cúng
Cấu hình cuối cùng: Là xâu nhị phân gồm n chữ số 0
Sinh(): Duyệt xâu S từ phải sang trái. Gán chữ só 0 đấu tiên thành 1 và tất cả
chữ sô bên phải nó thành 0

Start

Nhập độ dài xâu:


int n

Là xâu nhị phân


Khởi tạo xâu S
Gồm n chữ số 0
Là cấu hình đầu tiên

Sai
Đúng Check(S)

In cấu hình cuối


Sai
cùng

Sinh ()

End
In Xâu S

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;
string s="";
while(n--){
s+="0";
}
vector<string> v;
v.push_back(s);
int dem=1;
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';
v.push_back(s);dem++;
goto lap;
}
}
}
cout << " Cac xau thoa man la: "<< dem<<endl;
for(int i=0;i<v.size();i++){
cout <<" "<< v[i] <<endl;
}
}

2.3 Kết quả

You might also like