Professional Documents
Culture Documents
De 1-GK
De 1-GK
Họ tên:………………………………………Lớp………………MSSV:…………………
Sinh viên làm bài trực tiếp trên tệp này, lưu tệp với định dạng MSSV_HọTên.pdf và nộp bài
thông qua MSTeam:
Câu 1 (3 điểm) Cho n phần thưởng giống nhau chia đều cho k sinh viên
a) Hỏi có bao nhiêu cách chia.
# Trả lời: Dán lời giải vào bên dưới
b) Viết chương trình liệt kê phương án sao cho mỗi sinh viên nhận ít nhất 2 phần thưởng yêu ( k
va n thỏa mãn yêu cầu )
#include<stdio.h>
int n, k;
int x[1000];
void out() {
for(int i = 0; i < n; i++)
printf("%d ", x[i]);
printf("\n");
}
int main() {
scanf("%d %d", &n, &k);
Try(0, 0);
}
Câu 2 ( 3 điểm) Gọi Bn là số chuỗi nhọ phân độ dài n, không chứa hai bit 1 liền nhau.
a) Lập hệ thức truy hồi để tính Bn.
# Trả lời: Dán lời giải vào bên dưới
b) Giải hệ thức truy hồi trên câu a).
# Trả lời: Dán lời giải vào bên dưới
b) Viết chương trình liệt kê hoán vị tập X bằng phương pháp sinh
# Trả lời: Dán code vào bên dưới
#include<stdio.h>
void out(int s[], int n);
void Try(int i, int s[], int b[], int n);
int d=0;
int main(){
int n;
printf("nhap n=");
scanf("%d",&n);
int b[n+1], s[n+1];
for ( int j=1; j<=n; j++){
b[j]=1;
}
Try(1,s,b,n);
return 0;
}
void out(int s[], int n){
printf("%d: ", ++d);
for (int i=1; i<=n; i++){
printf("%d ", s[i]);
}
printf("\n");
}
void Try(int i, int s[], int b[], int n){
for (int j=1; j<=n; j++){
if(b[j]==1){
s[i]=j;
b[j]=0;
if(i==n){
out(s,n);
}
else Try(i+1,s,b,n);
b[j]=1;
}
}
}