-
22-12-2014, 01:55 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
XOR Swap:
a = a XOR B;
b = a XOR B;
a = a XOR B;View more random threads:
- Nhờ giúp về phím tắt (F..) để mở From
- Xử lý mảng trong C#.
- Gửi SMS trên WINFORM
- Hướng dẫn hàm Delete, Update, Insert
- không login vào sql sever 2008 được . mọi người giúp mình với
- Cho mình hỏi về quan hệ kết hợp:
- cài C# 2005 và C# 2008
- [Hỏi]Cách lấy giá vàng website khác
- Học Lập Trình ASP.Net MVC 5 Căn Bản qua video miễn phí
- Giao thức IMAP để nhận thư từ Yahoo
-
22-12-2014, 05:32 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Đi phỏng vấn gặp hàm swap bị rớt, anh em giúp dùm
Mình đi pv ở cty bên lập trính web asp.net và được ra cái đề dễ thế này. Mình làm liền không được và rớt.
Anh em giúp dùm, vì mình quên không hỏi đáp án, mà mình mò không ra.
void swap( a, b)
viết hàm swap mà không dùng thêm biến nào khác ngoài a và b.
Phải lường hết các trường hợp tràn số, lỗi linh tinh,..
ấp án của mình là.
a=a+b;
b=a-b;
a=a-b;
thế mà vẫn sai, vì nếu tràn số thì vẫn bị sai. ai bik đáp án cho em xin....
-
23-12-2014, 04:36 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi VNFox
-
23-12-2014, 07:57 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
void swap( &a, &b)
Mình nghĩ là bạn nên cộng rồi sau đó trừ, ví dụ:
a = 3
b = 2
a= a + b (5)
b = a - b (5-2) Giờ b = 3
a = a - b (5-3) giờ a = 2
Chỉ vậy thôi, và nhớ là ... nó phải là dạng reference ... nếu không reference thì không thay đổi được ... nếu làm vậy bị SAI mình nghĩ là người chấm cho bạn không thích bạn rồi [IMG]images/smilies/smile.png[/IMG]
XOR cũng ok ... nhưng nói chung là 2 cái điều có issue ... nếu a = b. 2 cái điều bị 0 hết .... tốt nhất là sài Temp [IMG]images/smilies/smile.png[/IMG]
Nhưng mình nghĩ dùng temp là good nhất! (works for numeric, string, ects)
-
24-12-2014, 12:00 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
hai số cùng kiểu lấy số lớn hơn trừ số bé hơn thì mình thấy chưa tràn số bao giờ, ai có ví dụ phép trừ bị tràn có thể cho mình mở rộng tầm mắt được không? tks.
-
24-12-2014, 12:05 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Một số dương trừ số âm thì liệu có xảy ra tràn số ko bạn?
-
24-12-2014, 06:06 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Cảm ơn mọi người, lúc vào pv rối quáng lên không nhớ được gì ! với lại bạn nào giải quyết được tràn số không? vì thấy cộng hay trừ mình thấy nó vẫn tràn số mà?
-
24-12-2014, 06:45 PM #8Silver member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
XOR + - đều ko làm đc swap(a, a) [IMG]images/smilies/smile.png[/IMG] (trừ phi bạn if(&a != &b))
Nếu swap theo kiểu XOR/+/- thì ko làm đc với floating-point (deref ra int thì đc) và object (ko phải class nào cũng có +/- ...)
-
24-12-2014, 07:30 PM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Nếu a và b là kiểu số thì bạn nên dùng phép trừ, vì phép trừ không gây tràn số.
a= b-a
,b= b-a
,a= b+a
làm như vừa rồi sẽ không có thằng nào báo lỗi, ngoại trừ a & b khác kiểu dl.
Nếu a,b là chuỗi thì không bị tràn số (hiển nhiên) nhưng sẽ bị giới hạn maxLength, cách giải chỉ là ghép chuỗi và substr thôi.
Vậy đề bạn gặp phải a & b mang kiểu dl gì?
Họ chấm bạn rớt không phải vì giải thuật của bạn kém mà là cách bạn tìm ra hướng giải quyết vấn đề.
-
24-12-2014, 07:38 PM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
@MrFox: Dùng XOR trong trường hợp này là đúng rồi bạn, nó chỉ sai khi reference A = reference B, còn nếu A = B thì vẫn đúng.
Thứ 2 là cách swap chủ thread nói vấn đề sai là do tràn số, thực ra cái này mình test với C thì nó vẫn đúng vì phép tràn này chỉ wrap around, nhưng đối với các ngôn ngữ khác thì không chắc nó sẽ ra sao.
@ Hoangthi: Trừ hay cộng thì vẫn tràn thôi bạn
Pallet nhựa Long An đã trở thành một trong những lựa chọn phổ biến cho nhu cầu vận chuyển và lưu trữ hàng hóa trong nhiều ngành công nghiệp. Với đặc tính nhẹ nhàng, chắc chắn và dễ vận chuyển, các...
Thanh lý pallet nhựa Long An giá rẻ