• [THÔNG BÁO] CẢNH BÁO LỪA ĐẢO MẠO DANH QUẢN TRỊ VIÊN
    Chào các thành viên GameVN,
    Dạo gần đây tình trạng lừa đảo scamming và phishing đang gia tăng. Ban quản trị GameVN xin lưu ý toàn bộ thành viên:
    KHÔNG/ ĐỪNG / CẤM cho bất kỳ ai tự xưng là quản trị viên của server vay tiền.
    Mọi hành vi lân la làm quen, tự tiện nhắn tin trên Discord, Facebook, Zalo hoặc các nền tảng mạng xã hội khác,
    núp bóng dưới danh nghĩa sinh hoạt của quản trị viên, đều có tỉ lệ rất, rất cao là lừa đảo.
    Nếu có tài khoản lạ add friend hoặc nhắn tin xin tiền dưới danh nghĩa admin:
    Block ngay
    Report ngay
    Không chuyển khoản, không cung cấp thông tin cá nhân


    Quản trị viên của forum và Discord server GameVN không có nhu cầu vay tiền thành viên.
    Không có lý do nào để admin chủ động kết bạn rồi xin tiền.
    Mọi thông báo chính thức chỉ được đăng trên kênh thông báo của server và topic chính thức trên forum.
    Tin nhắn riêng từ tài khoản lạ không phải thông báo của ban quản trị.
    Cảm ơn các bạn đã chú ý và cùng giữ cộng đồng an toàn.
    — Ban quản trị GameVN

    Tắt thông báo bằng nút X bên góc phải của bảng thông báo*

Queue | Thuật toán để in đảo số nguyên

hamyhoang75

Youtube Master Race
Tham gia ngày
3/4/09
Bài viết
1
Reaction score
0
Mình có bài này, nhờ mọi người giải thích hộ mình thuật toán để chạy là như thế nào. Cảm ơn mọi người nhiều.

Mã:
  #include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#define MaxLength 1000
struct Queue
{
   int a[MaxLength+1];
   int front,rear;
};
void CreateQ(Queue &Q)
{
	Q.front=0;
	Q.rear=0;
}
int EmptyQ(Queue Q)
{
	if (Q.front==0 && Q.rear==0)
	    return 1;
	else
	    return 0;
}
void AddQ(Queue &Q, int x)
{
	if (EmptyQ(Q))
	{
	   Q.front=Q.rear=1;
	   Q.a[Q.rear]=x;
	}

	else
	{
	   Q.rear++;
	   Q.a[Q.rear]=x;
	}
}
void RemoveQ(Queue &Q, int &x)
{
	if (EmptyQ(Q))
	    cout<<"\n hang doi rong!:";
	else
		{
			x=Q.a[Q.front];
			if (Q.front==Q.rear)
			    Q.front=Q.rear=0;
			else
			    Q.front++;
		}
}
void indao(int n)
{
	Queue q;
	CreateQ(q);
	int x;
	while (n>0)
	{
		AddQ(q, n%10);
		n=n/10;
	}
	while(!EmptyQ(q))
	{
		RemoveQ(q,x);
		cout<<x<<"  ";
	}
}
void main()
{
	int n;
	clrscr();
	cout<<"Nhap so nguyen duong n:\t"; cin>>n;
	cout<<"\nSo n in nguoc la:\t";
	indao(n);
	getch();

}
 
Bài này là minh họa đơn giản cho hàng đợi thôi mà,bạn chạy debug sẽ thấy thôi.

Struc của Queue gồm:
{

int a[MAX];// mảng để lưu số,vd số ban đầu bạn nhập vào là 12345 thì nó sẽ lưu trong đó là 54321
int front,rear;//Đánh dấu số

};

Demo thử nhé,giả như bạn nhập là 5367 đi,nó sẽ làm tuần tự như sau:

Bước 1:Khởi tạo và thêm phần tử vào hàng đợi (hàm AddQ)

lấy số dư khi 5367 cho 10 là 7,rồi thêm vào Q.a[1]
Cứ lặp như thế Q.a[2] = 6,Q.a[3] = 3,Q.a[4] = 5.
Đồng thời thì Q.front = 1,Q.rear = 4

Bước 2:Xuất và xóa hàng đợi :

Cho lệnh in ra mảng Q.a[] là xong thôi,rồi xóa ở đây là mỗi khi xuất ra một số,thì front tăng lên 1,cho tới khi front = rear thì thực hiện front = rear = 0,coi như xóa hàng đợi
 
có 1 cách hay để học thuật toán (cơ bản, còn phức tạp thì phải có óc tưởng tượng)

đọc từng dòng lệnh, ánh xạ ký hiệu với ý nghĩa của nó,chạy tay cho 1 vd đơn giản cụ thể để hiểu (nếu vẽ được sơ đồ thuật toán thì càng tốt)
<mình nêu cách này vì mấy bạn học mới học lập trình mà đọc code ko hiểu thì nên luyện như thế, chứ sau này đọc code lớn hơn thì nhờ ai>
còn về ý nghĩa thì nhìn sơ qua thì bạn ở trên giải thích khá đủ và rõ

have fun
 
cái này có phải C++ hok , học lâu quá rồi trả lại hết cho thầy cô lun=((
 
Nếu ko hiểu thuật toán, bạn nên sử dụng debug, sử dụng step in, out, over. Bạn sẽ thấy được dòng code này làm gì.
 
Back
Top