30/09/2018, 18:55

Cần trợ giúp bài liệt kê hoán vị. Code bị lặp vô hạn và chỉ in 123

void xuly(int n){
	int mang[n];
	for (int i=1;i<=n;i++)
		mang[i]=i;
	do{
		int i=n-1;
		for (int z=1;z<=n;z++)
				printf("%d ",mang[z]);
		printf("
");
		while(i>0 && mang[i]>mang[i+1]) i--;
		if (i>0){
			int k=n;
			while(mang[k]<mang[i]) k--;
			hoanvi(mang[k],mang[i]);
			int a=i+1,b=n;
			while(a<b){
				hoanvi(mang[a],mang[b]);
				a++;
				b--;
			}
		}
	}while(i!=0);
}

Mình làm bài liệt kê hoán vị nhưng code của mình khi cho chạy thì xuất kết quả lặp vô hạn nhưng chỉ in ra 123

*grab popcorn* viết 21:01 ngày 30/09/2018

Hàm hoán vị của bạn bị sai.
2 giá trị truyền vào ko đc đổi giá trị.

Dùng con trỏ là xong ngay xD nhé

17XGOD viết 20:57 ngày 30/09/2018
void hoanvi(int x, int y){
	int z;
	z=x;
	x=y;
	y=z;
}

em chạy debug thì nó swap được nhưng không truyền vào hàm xuly được

*grab popcorn* viết 21:11 ngày 30/09/2018

Bạn dùng con trỏ là đc

Vì hàm swap trên nó chỉ swap trong hàm thôi, khi ra khỏi làm là 2 giá trị truyền vào nguyên xi

void hoanvi(int *x, int *y){
	int z;
	z=*x;
	*x=*y;
	*y=z;
}
thêm dấu & trước khi truyền vào hàm
hoanvi(&m[a],&m[b]) là ngon ơ.
17XGOD viết 21:04 ngày 30/09/2018

để em tìm hiểu về con trỏ trước giờ chưa dùng con trỏ bao giờ hết

Pham Van Hai viết 21:00 ngày 30/09/2018

Bạn tìm hiểu thêm về cách truyền tham số vào hàm, vì nó có hai kiểu:

  • Call by value: http://www.tutorialspoint.com/cprogramming/c_function_call_by_value.htm
  • Call by references: http://www.tutorialspoint.com/cprogramming/c_function_call_by_reference.htm

ps: Xin lỗi vì mình không biết diễn đạt như nào cho dễ hiểu, bạn tham khảo theo link trên

17XGOD viết 21:09 ngày 30/09/2018

cảm ơn anh

Bài liên quan
0