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;
}
Bài liên quan
hàm hoán vị của bạn sai rồi, bạn có thể khai báo
Một số cái sai:
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.
Swapping two variable value without using third variable
tks hai bạn 20char
Bạn có thể giải thích giùm mình ý nghĩa của phép ^(XOR) với không >
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.
C làm gì có References mà bạn sử dụng. C chỉ có con trỏ thôi ạ.
Mình thích cách thứ 2 của bạn. Cách 1 mình sợ miền giá trị lắm
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.
Cách tính tổng rồi trừ có 2 nhược điểm: