30/09/2018, 18:34

Vấn đề về thuật toán hoán vị 2 số nguyên?

#include <stdio.h>
#include <conio.h>
int hoanvi(int a , int b)
{
	int a1,a2,b1;
	a1=a+b;
	b1=a1-b;
	a2=a1-b1;
	return a2;
	return b1;
	
}

int main()
{
	int a,b;
	printf("nhap a,b: ");scanf("%d %d",&a,&b);
	printf("a,b sau: %d %d 
",hoanvi(a,b));
	
	
	return 0;
	
}

Nguyễn Hải Đăng viết 20:48 ngày 30/09/2018

hàm hoán vị của bạn sai rồi, bạn có thể khai báo

int temp = a;
a = b;
b = temp;
Chi Ngo viết 20:50 ngày 30/09/2018

Một số cái sai:

  1. Biến truyền vào theo kiểu tham trị thì sẽ không thay đổi được (do đó không hoán đổi được). (Cần truyền theo tham chiếu)
  2. Hàm chỉ có thể trả về nhiều nhất 1 giá trị mà thôi.
  3. Nếu đã dùng 3 biến thì làm như bạn comment đầu tiên là tốt nhất, còn không vẫn có thể dùng 2 biến để hoán đổi được.
17XGOD viết 20:39 ngày 30/09/2018

có thể gợi ý cho mình chuyển giá trị 2 biến mà không dùng biến trung gian không

Tôi là tôi viết 20:43 ngày 30/09/2018

có thể gợi ý cho mình chuyển giá trị 2 biến mà không dùng biến trung gian không

C1
a = a + b;
b = a - b;
a = a - b;
C2
ngoài ra bạn nên dùng phép ^ (XOR)
a = a ^ b;
b = a ^ b;
a = a ^ b;
2 cách này mình thử thì thấy thời gian nó gần gần nhau thôi.

X viết 20:44 ngày 30/09/2018
stackoverflow.com
Muhammad Akhtar

Swapping two variable value without using third variable

c++
asked by Muhammad Akhtar on 01:22PM - 01 Dec 09
17XGOD viết 20:50 ngày 30/09/2018

tks hai bạn 20char

Interns viết 20:48 ngày 30/09/2018
#include <stdio.h>
#include <conio.h>
void hoanvi(int &a , int &b) 
{
        //truyền tham chiếu thì nó sẽ nhận địa chỉ của a và b
        // nên khi kết thúc hàm giá trị a và b thay đổi.
        //bạn thử truyền vào (int a , int b)  để thấy sự khác biệt nhé.
	int temp = a;
	a = b;
	b = temp;
}

int main()
{
	int a,b;
	printf("nhap a,b: ");scanf("%d %d",&a,&b);
	printf("a,b sau: %d %d \n",a, b);
	
	
	return 0;
	
}
Ngô Doãn Tuấn viết 20:36 ngày 30/09/2018

Bạn có thể giải thích giùm mình ý nghĩa của phép ^(XOR) với không >

Tôi là tôi viết 20:51 ngày 30/09/2018

vi.wikipedia.org

Phép toán thao tác bit

Trong ngôn ngữ máy tính, các phép toán trên thao tác bit (tiếng Anh: bitwise operation) được thực hiện trên một hoặc nhiều chuỗi bit hoặc số nhị phân tại cấp độ của từng bit riêng biệt. Các phép toán này được thực hiện nhanh, ưu tiên, được hỗ trợ trực tiếp bởi vi xử lý, và được dùng để điều khiển các giá trị dùng cho so sánh và tính toán. Đối với các loại vi xử lý rẻ tiền, thường thì các phép toán trên thao tác bit nhanh hơn phép chia đáng kể, đôi khi nhanh hơn phép nhân, và đôi khi nhanh hơn ph...


Vì nó thao tác trực tiếp trên bit nên sẽ nhanh hơn.

Tuổi Già Ta Vẫn Xông Pha viết 20:36 ngày 30/09/2018

C làm gì có References mà bạn sử dụng. C chỉ có con trỏ thôi ạ.

Tuổi Già Ta Vẫn Xông Pha viết 20:40 ngày 30/09/2018

Mình thích cách thứ 2 của bạn. Cách 1 mình sợ miền giá trị lắm

rogp10 viết 20:38 ngày 30/09/2018

Cách 2 là thông dụng nhất cách 1 (hai biến) chỉ có hỏi đố mới dùng, mà nên dùng xor.

Trần Hoàn viết 20:39 ngày 30/09/2018

Cách tính tổng rồi trừ có 2 nhược điểm:

  1. Overflow
  2. Lý do này có phần hơi nhảm nhí: Thực hiện phép cộng lâu hơn phép gán
Bài liên quan
0