PDA

View Full Version : Một bài toán



htbn_hoang
27-01-2005, 20:34
Có bài toán này các bạn giải thử
Không dùng biến phụ, đổi giá trị hai biến
VD : a = 10, b = 5 -> a= 5, b = 10

Một bài khác : làm sao biết một số là chẵn hay lẻ một cách nhanh nhất

Rikku
27-01-2005, 21:45
Too easy:
1)a=a+b;
b=a-b; //=a+b-b=a
a=a-b; //=a+b-a=b
2)Chưa lập trình bằng C bao giờ, nhưng nếu chia 2 dư 1 thì là lẻ, không thì là chẵn... O(1)

thanh dat
27-01-2005, 22:28
de kiem tra tinh chan le thi lam the nay :

int a ;
if((a - (a/2)*2)==0) printf(" a chan " ) else printf(" a le " ) ;

don gian la trong C thi phep chia chi lay phan nguyen !

Rikku
27-01-2005, 22:33
Aha, trong C không có phép chia lấy dư à...thảo nào.

coldsteel
28-01-2005, 00:59
Aha, trong C không có phép chia lấy dư à...thảo nào.

Ai nói với bro là C không có phép chia lấy dư? Bro ko học C vậy bro học ngôn ngữ LT nào vậy?

Kijuto Riddle
28-01-2005, 13:25
Xin lỗi các bro, cách nhanh nhất để kiểm tra tính chẵn lẻ là cách sau:


if ( a & 1 )
printf("a là số lẻ!\n");
else
printf("a là số chẵn!\n");


còn phương pháp để đổi giá trị hai số hạng chỉ mang tính ý tưởng, còn thực tế là không sử dụng vì không tối ưu về tốc độ và quan trọng nhất, có thể gây tràn số khi hai biến có tổng lớn hơn 32767 hoặc nhỏ hơn -32768.

vietpol
25-03-2006, 17:07
Một bài khác : làm sao biết một số là chẵn hay lẻ một cách nhanh nhất
Thực ra các hàm lấy phần dư được xây dựng trên phép tính cộng và trừ thôi

Không dùng hàm lấy phần dư bạn có thể làm như sau:

void chan_le(int a)
{
int b=a;
if(b<0)
b=-b;
while(b>1)
b=b-2;
if (b==0)
cout<<" so nay la so chan";
else
cout<<"so nay la so le";
}

c++19861986
26-03-2006, 14:43
void chanle(int n)
{
if(n%2==0) cout<<"So chan !";
else
cout<<"So le ";
}