1. Trang chủ
  2. » Công Nghệ Thông Tin

Đề và đáp án kỳ thi cao học môn Kỹ thuật lập trình PTIT

63 1,5K 8
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 63
Dung lượng 358 KB

Nội dung

Đề và đáp án kỳ thi cao học môn Kỹ thuật lập trình Học viện công nghệ bưu chính viễn thông. Đề và đáp án kỳ thi cao học môn Kỹ thuật lập trình Học viện công nghệ bưu chính viễn thông.Đề và đáp án kỳ thi cao học môn Kỹ thuật lập trình Học viện công nghệ bưu chính viễn thông.Đề và đáp án kỳ thi cao học môn Kỹ thuật lập trình Học viện công nghệ bưu chính viễn thông.

Trang 1

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

CƠ SỞ TP HỒ CHÍ MINH

ĐỀ VÀ ĐÁP ÁN KỲ THI TUYỂN SINH CAO HỌC

Câu 1 Cho trước số tự nhiên N Hãy tìm tất cả các ước số nguyên tố của nó

printf ("n=") ; scanf ("%d", &n);

int j=0; int i=2;

Đáp án:

+ Duyệt dãy và chuyển các phần tử khác không về đầu dãy

+ Điền 0 vào các phần tử còn lại

Trang 2

Câu 3 Giả sử ta có 20000 số nguyên phân biệt khác nhau (các số nguyên đó có trị từ

a Hãy trình bày cách lưu trữ và thuật toán sắp xếp dãy trên theo thứ tự tăng dần sao cho ít tốn bộ nhớ trong nhất và sắp xếp nhanh nhất (1đ)

b Cài đặt thuật toán đã trình bày ở câu a (1đ)

c Viết chương trình con liệt kê dãy đã được sắp ra màn hình (1đ)

Đáp án :

a Vì các số nguyên phân biệt khác nhau và có miền giá trị từ 1 đến 30000 nên ta chọnphương án lưu trữ 1 số nguyên trên 1 bit, và số bytes cần thiết để lưu trữ 20000 số nguyên này là 30000/8 = 3750 bytes Do đó, ta đã giảm 40000 bytes xuống còn 3750 bytes Ta quy ước cách lưu trữ số nguyên trên bit như sau : (các bit được đánh số từ 0

1 0 0 0 1 1 1 1 * 1 0 1 0 1 1 1 1* … * ……

Nếu số nguyên = 1 thì ta bật bit thứ 0 của byte 0

Nếu số nguyên = 5 thì ta bật bit thứ 4 của byte 0

………

Nếu số nguyên = 11 thì ta bật bit thứ 2 của byte 1

Với cách quy ước này thì rõ ràng sau khi ta đã lưu 20000 số vào 3750 bytes thì dãy đã có thứ tự tăng dần, nên thời gian sắp xếp dãy là bằng 0

Ghi chú: Dấu * là dấu hiệu cho ta biết qua byte kế tiếp

const int MAX = 32000;

const SO_BYTE = MAX/8;

unsigned char A[SO_BYTE];

void TaoDay(unsigned char A[])

{

int so;

int byte, bit;

unsigned char mask [8] = {0x80,0x40,0x20,0x10,8,4,2,1};

for (int i=0; i<SO_BYTE; i++) A[i]=0 ;

Trang 3

if ( (A[byte] & mask[bit]) == 0)

{ unsigned int mask = 0x80;

printf("\n SO DA DUOC SAP :\n");

for (int i=0; i<SO_BYTE; i++)

Trang 4

a Bạn hãy đưa ra 1 cách thức lưu trữ 2000 điểm trên sao cho ít tốn bộ nhớ hơn.Viết khai báo và chương trình con để lưu trữ 1 điểm x tại vị trí (i,j) trong bảnđồ (1.5đ)

b Viết chương trình con để xác định điểm nào (trong số 2000 điểm) được lưutrữ tại vị trí (cot i,dong j) theo cách thức lưu trữ mà bạn đề nghị trong câu a.Nếu không có điểm nào được lưu trữ tại vị trí (i,j) thì chương trình con sẽ trả

Đáp án:

int FirstInCol [201] ; // FirstInCol [i+1]- FirstInCol [i] cho biết có bao nhiêu điểm trênbản đồ nằm trên cột i và điểm đầu tiên ở tọa độ (cột, dòng) = (i, Row[FirstInCol[i]])int Value [2000] : chứa giá trị điểm

int Row [2000] : chứa vị trí dòng của điểm có cột thuộc FirstInCol

Đáp án:

Trang 5

long Tong_Vecto_con(int A[], int n)

Trang 6

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

CƠ SỞ TP HỒ CHÍ MINH

ĐỀ VÀ ĐÁP ÁN KỲ THI TUYỂN SINH CAO HỌC

Câu 1 Trong mảng A[1:n] (với n khá lớn) chỉ chứa các số 0,1, và 2 Hốn vị các phần tử

của mảng, sao cho đầu mảng chứa các số 1, sau đĩ là các số 2, cuối mảng là các số 0.Lưu ý : Khơng được dùng mảng phụ

Trang 7

for ( i=1 ; i<=B[1] ; i++) A[i]=1 ;

for ( i=1 ; i<=B[2] ; i++) A[B[1]+i]=2 ;

for ( i=1 ; i<=B[0] ; i++) A[ B[1]+B[2]+i]=0 ;

}

Câu 2 Một mảng chứa N cặp số thực (ai, bi) tương ứng với N đường thẳng yi = aix+bi.Các đường được sắp xếp theo đoạn [0,1] trên trục x với ý nghĩa sau: yi<yi+1 với mọi giátrị i giữa 0 và N-2, và với mọi giá trị của x trên đoạn [0,1]:

Trình bày thuật toán và viết chương trình con để xác định nhanh 2 đường gần nhất

“bao quanh” điểm P(xP,yP) , với P là điểm cho trước và 0  xP  1

Trang 8

tại điểm xP, đường thẳng này sẽ cắt N đường thẳng trong dãy A tại N vị trí Do tínhchất yi<yi+1 với mọi giá trị i giữa 0 và N-2, do đó ta có dãy Y tăng dần

- Aùp dụng thuật toán tìm nhị phân để tìm yP trên dãy Y tăng dần, ta sẽ có kết quảcủa đề bài

- Kết quả : có 4 trường hợp nghiệm :

Nếu P nằm ngay trên 1 đường thẳng Y[i] thì trả về i

Nếu yP < Y0 : trả về 0

Nếu yP < YN-1 : trả về N-1

Nếu P không thỏa 3 trường hợp trên thì trả về i , i+1 với Y[i] < yP < Y[i+1]

Câu 3 Cho trước 1 dãy khĩa A[1:n] thuộc kiểu số nguyên Hãy trình bày cách thức lưu

trữ và thuật tốn để cĩ thể tìm nhanh 1 khĩa k cĩ trong dãy khĩa hay khơng ?

Lưu ý: Dãy chưa được sắp thứ tự

Đáp án: Ta dùng hàm băm A[i] % 101 với phương pháp nối kết trực tiếp để lưu trữ dãy khĩa này

const M = 101 ;

typedef struct node {

int key; // khóaint dc ; // địa chỉ của khóa key trong Astruct node * next ;

Trang 9

Bước 2: Chuyển các khóa vào mảng băm:

for (int i=0; i<n ; i++)

Insert_First(A[i], i, A[i] % M]

Bước 3: Tìm kiếm 1 khóa k trong bảng băm: nếu tìm thấy thì hàm sẽ trả về đ/c của

phần tử chứa khóa, nếu không tìm thấy thì trả về -1

int Search (int k, ref heads[]) {

Câu 4 Cho trước mảng 2 chiều A[1:n][1:n], mỗi phần tử của nĩ bằng 0, 1, 5 hoặc 11

Hãy tính số lượng các bộ bốn A[i,j], A[i+1,j], A[i, j+1], A[i+1, j+1] trong đĩ các phần tử đều khác nhau

Trang 10

Đáp án: Duyệt mảng 2 chiều, với mỗi i,j ta so sánh

if (A[i ][j]+ A[i+1][j]+ A[i] [j+1]+ A[i+1][ j+1]==17) dem ++;

Câu 5 Cho1 đồ thị G có hướng Đồ thị có tối đa MAX đỉnh Các đỉnh được đánh số từ

0 đến n –1, với n là số đỉnh thực tế của đồ thị (0 < n  MAX)

a Viết khai báo để lưu trữ đồ thị G trên theo cấu trúc ma trận kề

b Viết chương trình con để xác định đồ thị có đường đi từ đỉnh u đến đỉnh v hay không?

Đáp án

a) Khai báo để lưu trữ 1 đồ thị G có hướng có trọng số theo cấu trúc ma trận kề

const MAX = 50; // Số đỉnh tối đa của đồ thị

typedef int Dothi[MAX][MAX] ;

Dothi G ;

int n ; // số đỉnh thực tế trong G;

b) Chương trình con xác định đồ thị có đường đi từ đỉnh u đến đỉnh v hay khôngThuật toán:

- Ta dùng thuật toán WarShall để tìm bao đóng BD của của đồ thị G

- Nếu trong mảng 2 chiều BD mà BD [u][v] != 0 nghĩa là sẽ có 1 đường đi từ đỉnh

u đến đỉnh v, và ngược lại

Chương trình:

void WarShall( int G[][MAX], int n, int u, int v)

{

int i,j,k, dem;

int C[MAX][MAX], P[MAX][MAX];

int BD[MAX][MAX]; // bao dong cua ma tran G

for( i=0; i<n;i++) // P1

Trang 11

for (k=0; k<n; k++) C[i][j]= C[i][j] || (P[i][k] && G[k][j]); }

cout << “Co duong di tu dinh “ << u << “den dinh “ << v ;

else cout << “Khong co duong di tu dinh “ << u << “den dinh “ << v; }

HẾT

Trang 12

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

CƠ SỞ TP HỒ CHÍ MINH

ĐỀ VÀ ĐÁP ÁN KỲ THI TUYỂN SINH CAO HỌC

Câu 1: Hãy cho biết kết quả thực hiện của chương trình dưới đây.

#include <stdio.h>

#include <conio.h>

#include <string.h>

char str[255]="AB1 AB2 AB3 AB4 AB5 AB6 AB7 AB8 AB9 AC1 AC2 AC3 AC4 AC5 AC6 \

AC7 AC8 AC9 AD1 AD2 AD3 AD4 AD5 AD6 AD7";

default:

s[k++]=str[i]; break;

} }

}

Câu 2: Cho dãy gồm n số tự nhiên phân biệt a 1 , a 2 , , a n (n  1000); và hai số tự nhiên k (k<n)

và B Hãy liệt kê tất cả các dãy con k phần tử của dãy số {a n } sao cho tổng các phần tử của dãy con đĩ đúng bằng B Dữ liệu vào cho bởi file Data.in theo khuơn dạng như sau:

Dịng đầu tiên ghi lại các số tự nhiên n, k và B Hai số khác nhau được viết cách nhau bởi

một vài ký tự trống

Dịng kế tiếp ghi lại n số nguyên dương a 1 , a 2 , ,a n Hai số khác nhau được viết cách nhau

bởi một vài ký tự trống

Trang 13

Các dãy con k phần tử tìm được ghi lại trong file Ketqua.out theo khuôn dạng sau:

Dòng đầu tiên ghi lại một số tự nhiên m là số các dãy con k phần tử của dãy {a n } có tổng các phần tử đúng bằng B.

m dòng tiếp ghi lại trên mỗi dòng là một dãy con k phần tử của dãy {a n } có tổng các phần

tử đúng bằng B Hai phần tử khác nhau của dãy con được viết cách nhau bởi một vàikhoảng trống

Ví dụ : Với file Data.in dưới đây sẽ cho ta file Ketqua.out tương ứng

Câu 3: Ta định nghĩa một từ là dãy các kí tự không chứa khoảng trống (space), dấu tab, dấu

xuống dòng (‘\n’), dấu về đầu dòng (‘\r’) và dấu kết thúc dòng (‘\0’) Cho hai file văn bảnData1.in và Data2.in

Hãy tìm tập các từ xuất hiện trong file Data1.in nhưng không xuất hiện trong file Data2.in.Các từ tìm được ghi lại trong file Ketqua.out theo khuôn dạng sau:

Dòng đầu tiên ghi lại số tự nhiên k là số từ xuất hiện trong file Data1.in nhưng không xuất

hiện trong file Data2.in;

k dòng kế tiếp, mỗi dòng ghi lại một từ xuất hiện trong file Data1.in nhưng không xuất

hiện trong file Data2.in

Ví dụ dưới đây sẽ minh họa cho các file dữ liệu vào và file kết quả của bài toán

Câu 4: Cho một danh sách liên kết với con trỏ đầu là First nhằm quản lý danh sách các

sinh viên trong một trường Mỗi sinh viên có các thông tin sau đây: masv (mã sinh viên tối đa 8 ký tự), ho (họ - tối đa 40 ký tự), ten (tên - tối đa 10 ký tự), gt (giới tính - tối đa

-3 ký tự), malop (mã lớp - tối đa 8 ký tự) và được khai báo theo kiểu cấu trúc:

typedef struct SINHVIEN {

char masv [8]; char ho [40];

char ten[10]; char gt [3] ; char malop [8];

AE AF AG AH

Trang 14

a Viết chương trình con tạo một danh sách chứa các phần tử, mỗi phần tử chứathông tin sau: masv (mã sinh viên) của một sinh viên trong danh sách liên kếtFirst, diachi (địa chỉ) chứa địa chỉ vùng nhớ tương ứng với sinh viên có mãmasv trong danh sách sinh viên.

b Viết chương trình con sắp xếp danh sách sinh viên tăng dần theo mã sinh viênmasv sao cho ta có thể đưa danh sách sinh viên mới sắp xếp này quay trở lại trật

tự ban đầu như khi nhập liệu

Câu 5: Cho đồ thị vô hướng G có n đỉnh với các đỉnh được đánh số từ 1 đến n theo cấu trúc ma

trận kề sau đây:

const MAX = 50; // Số đỉnh tối đa của đồ thị

typedef int Dothi[MAX][MAX] ;

Dothi G ;

int n; // số đỉnh của đồ thị G

Hãy viết chương trình con để xác định đồ thị G có đường đi từ đỉnh u đến đỉnh v hay không?

Ghi chú: Cán bộ coi thi không giải thích gì thêm

ĐÁP ÁN

Câu 1 Tách chuỗi thành các từ

2,0

0.5đ0.5đ0.5đ0.5đ

printf("\n Day so:");

for(int i=1; i<=n; i++){

Trang 15

int Find_Word( w *tu, int wn, w temp){

for(int i=1; i<=wn; i++){

Trang 16

int Tim_Tap_Tu(char *name, w tu[] ){

- Tìm tập hiệu các từ và ghi kết quả đúng khuôn dạng

int Find_Word_File1_In_File2(char *s, w *tu, int n){

for(int i=1; i<=n; i++){

Trang 17

for ( p= First, n=0 ; p <> NULL; p=p->next) n++ ;

Index = new PhanTu [n];

for ( int i=0, p=First ; p <> NULL ; p= p->next, i++)

Câu 5:

typedef int Dothi[MAX][MAX] ;

Ta dùng thuật toán DFS duyệt đồ thị từ đỉnh u, trong quá trình duyệt nếu tìm

thấy đỉnh v thì trả về 1 Nếu kết thúc DFS mà vẫn không thấy v thì trả về 0

int DFS(Dothi G, int n, int u, int v)

{

int *C = new int [n+1] ; // de danh dau cac dinh da di qua

2.0đ

Trang 18

int *Stack= new int [n] ; // Stack de chua cac dinh trong khi

duyet

int sp ;

int i,x ;

for (i=1; i<=n; C[i++] =0 );

for (i=1; i <= n; i++) // dua tat ca cac nut chua duyet tu x vao C

if (G[x][i] && C[i]==0)

Trang 19

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

CƠ SỞ TP HỒ CHÍ MINH

ĐỀ VÀ ĐÁP ÁN KỲ THI TUYỂN SINH CAO HỌC

MÔN THI : KỸ THUẬT LẬP TRÌNH

Câu 1: Hãy cho biết kết quả thực hiện của chương trình dưới đây:

else

if (d >= 10 && d <= 36)

s[++n] = 'A' + (d-10);

else s[++n]= 'a' + (d-26);

printf("\n Ket qua buoc %d:%c", ++count, s[n]);

} while(k!=0);

printf("\n Ket qua buoc %d:",++count);

for(int i=n; i >= 1; i )

printf("%3c",s[i]);

}

Câu 2: Cho dãy gồm n số tự nhiên phân biệt a 1 , a 2 , , a n (n  1000) và số tự nhiên B Hãy liệt

kê tất cả các dãy con của dãy số {a n } sao cho tổng các phần tử của dãy con đĩ đúng bằng B Dữ

liệu vào cho bởi file data.in theo khuơn dạng như sau:

Dịng đầu tiên ghi lại hai số tự nhiên n và B Hai số được viết cách nhau bởi một vài

khoảng trống

Dịng kế tiếp ghi lại n số nguyên dương a 1 , a 2 , ,a n Hai số khác nhau được viết cách nhau

bởi một vài ký tự trống

Trang 20

Các dãy con tìm được ghi lại trong file Ketqua.out theo khuôn dạng sau:

Dòng đầu tiên ghi lại số tự nhiên k là số các dãy con của dãy {a n } có tổng các phần tử đúng bằng B.

k dòng tiếp theo mỗi dòng ghi lại là một dãy con của dãy {a n } có tổng các phần tử đúng bằng B Hai phần tử khác nhau của dãy con được viết cách nhau bởi một vài khoảng

trống

Ví dụ với file Data.in dưới đây sẽ cho ta file Ketqua.out tương ứng

Câu 3: Một cây nhị phân được gọi là cân bằng hoàn toàn nếu tại tất cả các nút, số nút của

cây con bên trái và số nút của cây con bên phải của nút đó chênh lệch nhau không quá 1

Cho cây nhị phân tìm kiếm có con trỏ đầu tree chỉ đến gốc của cây với khai báo sau:

struct node {

int key;

int info ; struct node *left;

struct node *right;

} ;

typedef struct node *PTR;

PTR tree;

a Hãy viết chương trình con xác định xem cây nhị phân tree có phải là cây nhị phân tìm

kiếm cân bằng hoàn toàn hay không?

b Hãy viết hàm trả về mức của nút có khóa key = X, với X là số nguyên dương và giả sử

rằng nút gốc có mức bằng 1 Ghi chú là trong trường hợp cây tree không có nút với khóa

X thì hàm sẽ trả về 0

Câu 4: Ta định nghĩa một từ là dãy các kí tự không chứa khoảng trống (space), dấu tab, dấu

xuống dòng (‘\n’), dấu về đầu dòng (‘\r’) và dấu kết thúc dòng (‘\0’) Tần xuất xuất hiện của từ

W trong tập văn bản D, ký hiệu là P(W) và được tính theo công thức: ( ) (( ))

D N

W N W

N(W) là số lần xuất hiện từ W trong văn bản D, N(D) là số từ của văn bản D

Cho file văn bản Data.in Hãy tìm tập các từ và tần xuất xuất hiện của mỗi từ trong file văn bảnData.in Kết quả các từ và tần xuất xuất hiện của từ tìm được ghi lại trong file Ketqua.out theokhuôn dạng sau:

 Dòng đầu tiên ghi lại số tự nhiên K là số từ xuất hiện trong file Data.in;

 K dòng kế tiếp, mỗi dòng ghi lại một từ W và tần xuất xuất hiện của từ đó P(W) trong fileData.in W và P(W) được viết cách nhau bởi một vài khoảng trống

Ví dụ dưới đây sẽ minh họa cho file Data.in và Ketqua.out của bài toán

Trang 21

const MAX = 50; // Số đỉnh tối đa của đồ thị

typedef int Dothi[MAX][MAX] ;

Dothi G ;

int n; // số đỉnh của đồ thị G

Hãy viết chương trình con để xác định đồ thị G có liên thông hay không?

Ghi chú: Cán bộ coi thi không giải thích gì thêm

ĐÁP ÁN

Câu 1 Lấy phần dư của phép chia 4

Ket qua buoc 1: 3

Ket qua buoc 2: 2

Ket qua buoc 3: 3

Ket qua buoc 4: 1

Ket qua buoc 5: 1 3 2 3

2,0đ

0.5đ0.5đ0.5đ0.5đ

printf("\n Day so:");

for(int i=1; i<=n; i++){

Trang 22

while(i>0 && B[i]) { B[i]=0; i ;};

struct node *right;

} ;

typedef struct node *PTR;

PTR tree;

a Xác định xem cây nhị phân tree có phải là cây nhị phân

tìm kiếm cân bằng hoàn toàn hay không?

int SoNut (PTR tree) // tính số nút của cây nhị phân tree

int CanBangHoanToan (PTR treee)

{

2,0đ

0.25đ0.75đ

Trang 23

while (p!=NULL && cont)

{ trai = SoNut (p->left) ;

phai = SoNut (p->right);

if ( abs ( trai-phai) >1) return 0; // không cân bằng hoàn

b int MucNut(PTR tree, int x ) {

PTR p = tree; int muc =1;

while ( p != NULL && p->key !=x)

- Tách từ trong file và tập hợp lại trong mảng w

int Tim_Tap_Tu( w tu[] ){

w temp; char s[20];

2.0đ

0.5đ

0.5đ

Trang 24

//Nếu i=wn+1 thi bổ xung từ mới vào vị trí wn+1

int Find_Word( w *tu, int wn, w temp){

for(int i=1; i<=wn; i++){

- Tính tần xuất xuất hiện mỗi từ, ghi kết quả đúng khuôn dạng

void In_Tu(w *tu, int k){

printf("\n Ket qua:");

fp1= fopen("Ketqua.Out","w");

fprintf( fp1, "\n%d",wn);

for(int i=1; i<=k;i++){

tu[i].tanxuat = (float) tu[i].solan /(float) wf;

printf("\n %10s %3d %6.2f", tu[i].word, tu[i].solan,

Trang 25

int n; // số đỉnh của đồ thị G

Viết chương trình con để xác định đồ thị G cĩ liên thơng hay

khơng?

Thuật tốn:

Xét 1 đỉnh u (1 n) trong đồ thi G, ta dùng thuật tốn DFS duyệt

đồ thị từ đỉnh u, trong quá trình duyệt nếu phát hiện 1 đỉnh v

khơng xuất hiện trong kết quả duyệt thì trả về 0 để cho biết đồ

thị khơng liên thơng

int LienThong(Dothi G, int n)

{

int *C = new int [n+1] ; // de danh dau cac dinh da di qua

int *Stack= new int [n] ; // Stack de chua cac dinh trong

khi duyet

int sp ; int i,x ;

int u=1;

for (i=1; i<=n; C[i++] = 0 );

sp ; // xoa dinh vua tham ra khoi Stack

for (i=1; i <= n; i++) // dua tat ca cac nut chua duyet tu x

for (i=1; i<=n && C[i] ==1 ; i++ );

- Ta dùng thuật toán WarShall để tìm bao đóng BD

của của đồ thị G

Trang 26

- Nếu trong mảng 2 chiều BD mà BD [u][v] != 0 nghĩa

là sẽ có 1 đường đi từ đỉnh u đến đỉnh v, và

ngược lại Do đó, nếu tồn tại u,v sao cho BD[u][v]

==0 nghĩa là đồ thị không liên thông

Chương trình:

int WarShall( Dothi G, int n)

{

int i,j,k, dem;

int C[MAX][MAX], P[MAX][MAX];

int BD[MAX][MAX]; // bao dong cua ma tran G

for( i=0; i<n;i++) // P1

// Kiểm tra đồ thị liên thông ?

for(int u=0; u<n;u++)

for (int v=0;v<n; j++)

if (BD[u][v] ==0)

{ cout << “Do thi khong lien thong “; return ; }

cout << “Do thi lien thong “;

Trang 27

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

CƠ SỞ TP HỒ CHÍ MINH

ĐỀ VÀ ĐÁP ÁN KỲ THI TUYỂN SINH CAO HỌC

Câu 1 Chương trình con sau đây dùng để tạo một số ngẫu nhiên khơng trùng nhau trongkhoảng từ 1 đến n

void nhap_day(int A[]) {

int i,so, dem=0;

Trang 28

b Hãy tìm giải thuật tạo m số ngẫu nhiên không trùng nhau trong khoảng từ 1 đến n vớiđiều kiện là chạy nhanh hơn về thời gian thực thi Sau đó cài đặt giải thuật trên.

Câu 2 Cho trước mảng 2 chiều A[1:n][1:n], mỗi phần tử của nó bằng 0, 1, 5 hoặc 11

Hãy tính số lượng các bộ bốn A[i,j], A[i+1,j], A[i, j+1], A[i+1, j+1] trong đó các phần tử đều khác nhau

Câu 3 Cây nhị phân cân bằng hoàn toàn là cây nhị phân mà tương ứng với tất cả các nút

thì số nút của cây con bên trái và số nút của cây con bên phải chênh lệch nhau không quá1

Cho cây nhị phân tìm kiếm có con trỏ đầu tree chỉ đến gốc của cây với khai báo như

sau:

struct node {

int key;

int info ;struct node *left;

struct node *right;

} ;

typedef struct node *PTR;

PTR tree;

c Hãy viết chương trình con xác định xem cây nhị phân tree có phải là cây nhị phân

tìm kiếm cân bằng hoàn toàn hay không?

c Hãy viết hàm trả về mức của nút có khóa key = X, với X là số nguyên dương và

giả sử rằng nút gốc có mức bằng 1 Ghi chú là trong trường hợp cây tree không có

nút với khóa X thì hàm sẽ trả về 0

Câu 4 Cho một danh sách liên kết với con trỏ đầu là First nhằm quản lý danh sách các

sinh viên trong một trường Mỗi sinh viên có các thông tin sau đây: masv (mã sinh viên tối đa 8 ký tự), ho (họ - tối đa 40 ký tự), ten (tên - tối đa 10 ký tự), gt (giới tính - tối đa

-3 ký tự), malop (mã lớp - tối đa 8 ký tự) và được khai báo theo kiểu cấu trúc:

typedef struct SINHVIEN {

char masv [8]; char ho [40];

char ten[10]; char gt [3] ; char malop [8];

Trang 29

e Viết chương trình con sắp xếp danh sách sinh viên tăng dần theo mã sinh viênmasv sao cho ta có thể đưa danh sách sinh viên mới sắp xếp này quay trở lại trật

tự ban đầu như khi nhập liệu

Câu 5 Cho đồ thị vô hướng G có n đỉnh với các đỉnh được đánh số từ 1 đến n theo cấu

trúc ma trận kề sau đây:

typedef int Dothi[MAX][MAX] ;

Dothi G ;

int n; // số đỉnh của đồ thị G

Hãy viết chương trình con để xác định đồ thị G có liên thông hay không?

HẾT

Trang 30

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

CƠ SỞ TP HỒ CHÍ MINH

ĐỀ VÀ ĐÁP ÁN KỲ THI TUYỂN SINH CAO HỌC

Câu 1

a Khơng tăng biến ‘dem’ nên vịng lặp sẽ chạy vơ hạn

Do đĩ chương trình cần sửa lại đoạn A[dem]= so thành A[dem++]=so

b Chương trình cải tiến sau sẽ giảm đi 1 vịng lặp lồng nhau

void nhap_day(int A[]) {

int i,so, dem=0;

Đáp án: Duyệt mảng 2 chiều, với mỗi i,j ta so sánh

if (A[i ][j]+ A[i+1][j]+ A[i] [j+1]+ A[i+1][ j+1]==17) dem ++;

Câu 3.

struct node {

int key;

int info ;struct node *left;

struct node *right;

int SoNut (PTR tree) // tính số nút của cây nhị phân tree

int CanBangHoanToan (PTR treee)

Trang 31

while (p!=NULL && cont)

{ trai = SoNut (p->left) ;

phai = SoNut (p->right);

if ( abs ( trai-phai) >1) return 0; // không cân bằng hoàn toàn

b int MucNut(PTR tree, int x ) {

PTR p = tree; int muc =1;

while ( p != NULL && p->key !=x)

Ngày đăng: 14/04/2017, 15:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w