nhập vào 3 số nguyên dương, xuất ra giá trị lớn nhất, giá trị nhỏ nhất.
KHÔNG dùng các cấu trúc điều kiện rẽ nhánh, không dùng sort (thực ra cũng chứa if) ,…
Nói tóm lại chỉ dùng các phép toán
Đố vui giải trí cuối ngày [Bài toán vui]
Cái này mình quen, không biết thiếu sót gì không
#include <iostream>
using namespace std;
int SoLonNhat(int,int,int);
int SoBeNhat(int,int,int);
int main()
{
int a=123, b=44, c=2331;
cout << "So lon nhat trong 3 so la: " << SoLonNhat(a,b,c) << endl;
cout << "So be nhat trong 3 so la: " << SoBeNhat(a,b,c);
}
int SoLonNhat(int a,int b,int c){
return a*(a>b & a>c)+
b*(b>a & b>c)+
c*(c>a & c>b);
}
int SoBeNhat(int a,int b,int c){
return a*(a<b & a<c)+
b*(b<a & b<c)+
c*(c<a & c<b);
}
Cái này mình làm theo trang bit-hack
https://graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax
#include <iostream>
using namespace std;
int main() {
// your code goes here
int a, b, c;
cin >> a >> b >> c;
int min, max;
max = a ^ ((b ^ a) & -(a < b));
min = b ^ ((b ^ a) & -(a < b));
max = max ^ ((c ^ max) & -(max < c));
min = min ^ ((min ^ c) & -(c < min));
cout << "Min: " << min << endl;
cout << "Max: " << max << endl;
return 0;
}
Không khác gì dùng điều kiện rẽ nhánh :)) Cách này có hợp lệ không
#include <stdio.h>
int cmp(int a,int b)
{
while(a>=b) return 1;
return 0;
}
void fun2(int a,int b,int c)
{
while(cmp(a,b) && cmp(a,c))
{
printf("max = %d\n",a);
while(cmp(b,c))
{
printf("min = %d\n",c);
break;
}
while(cmp(c,b))
{
printf("min = %d\n",b);
break;
}
break;
}
}
void solution(int a,int b, int c)
{
fun2(a,b,c);
fun2(b,a,c);
fun2(c,a,b);
}
int main()
{
int m,n,t;
scanf("%d %d %d",&m,&n,&t);
solution(m,n,t);
}
:3 ghê quá
mình ko nghĩ đến cách dùng bit :))
Cũng chả biết diễn tả ý tưởng thế nào bằng code :v biết mỗi pascal 
max(a,b)= int( (a*int(a/b)+b*int(b/a) ) /( int(a/b)+int(b/a) ) )
max(a,b,c)= max(max(a,b),c)
min(a,b) = int( (a*int(b/a)+b*int(a/b) ) /( int(a/b)+int(b/a) ))
min(a,b,c)= min(min(a,b),c)
code theo tí bằng c++ mới học được cho dễ nhìn:D
#include <iostream>
using namespace std;
int max(int a,int b){
return (a*(a/b)+b*(b/a))/(a/b+b/a);
}
int min(int a,int b){
return (a*(b/a)+b*(a/b))/(a/b+b/a);
}
int main(){
int a,b,c;
cin>>a>>b>>c;
cout<<max(max(a,b),c);
cout<<min(min(a,b),c);
}
cách này của bác
đúng kiểu lách luật :v nhưng do luật không nói rõ nên đành thêm luật vậy :v cấm dùng cấu trúc vòng lặp :3
cách này “chưa” đúng nhé bác :3 còn tại sao bác cứ từ từ sẽ ngẫm ra
cao siêu quá :3 nhưng mà đúng 
Em có cao kiến thế này,Các bác xem giùm
public static int Max(int a,int b)
{
HashMap hashMap = new HashMap();
hashMap.put(new Boolean(false), new Integer(0));
hashMap.put(new Boolean(true), new Integer(1));
return ((int) hashMap.get(a >= b) * a) + ((int) hashMap.get(a < b) * b);
}
public static int Max3So(int a,int b,int c)
{
int maxab = Max(a,b);
return Max(maxab,c);
}
Mình hỏi ngu phát :
Thế nếu làm được thì giải quyết được vấn đề gì ?
bác có thể giải thích cho mình 2 cái công thức return kia không? 
Int a, b, c, Max, Min;
Max = a > b ? a : b;
Min = a > b ? b : a,
Max = Max > c ? Max : c;
Min = Min > c ? c : Min?
for fun thôi mà bạn 
à
tại vì c+ +
int a,b;
a/b mà không ép kiểu thì nó tự lấy phần nguyên luôn (khác làm tròn nhé)
ví dụ: 1/2=0; 2/3=0;1/3=0;
còn cái hàm thì chỉ để tính:
tổng các số có giá trị lớn nhất (trường hợp có 2 số bằng nhau)/ số số có giá trị lớn nhất
min thì ngược lại 
đây là cấu trúc điều kiện mà bạn 
Mình nhớ không nhầm là có công thức tính trực tiếp min, max của 3 số
mình đọc được công thức đó trên 1 trang luyện code online của brazil.
Mấy số cũng được mà bác 
tmax= a1 * [a1/a1] * [a1/a2] * [a1/a3]*...*[a1/an] + a2* [a2/a1] * [a2/a3]* ...*[a2/an]+....+ an*[an/a1]*[an/a2]*...*[an/an]
smax=[a1/a1] * [a1/a2] * [a1/a3]*...*[a1/an] + [a2/a1] * [a2/a3]* ...*[a2/an]+....+ [an/a1]*[an/a2]*...*[an/an]
max=tmax/smax
[a]: là phần nguyên của a
à ý mình hỏi là đoạn công thức ý, sao công thức đó lại tính ra đc số lớn nhất và nhỏ nhất?
à bạn thử lắp 1 số th vào cho dễ hiểu 
Rồi chia thành 2 bài toán nhỏ:
Bài 1: Cho 2 số a,b tìm số số có giá trị lớn nhất
nhìn câu hỏi có vẻ ngu nhưng cũng vui :v
TH1: a=b thì có 2 số
TH2: a#b thì có 1 số
Bài 2: Tính tổng của các giá trị lớn nhất.
TH1: a=b thì aa/b+bb/a=2a=2b;
TH2: a#b (không mất tính tổng quát giả sử a>b) thì aa/b+bb/a=a1+b0=a
p/s: Mình không giỏi giải thích
hi vọng bạn hiểu 
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?