Tìm số lớn trong 2 số, ko dùng if, không dùng dấu so sánh

Chào mọi người. e mới học lập trình và gặp phải 1 bài như vậy. Đề yêu cầu tìm số lớn nhất trong 2 số và yêu cầu viết tiếp code :
cout <<
Và đề cấm các kí tự sau


Mong mọi người giúp e

Uầy, vậy sao xuất kết quả được nhỉ.

p/s: nếu ko thích ternary thì dùng trị tuyệt đối thôi.

2 Likes

e k biết nữa @@ đề nó bắt thế

Hi Trần Công.
Cái này bạn làm ở đâu thế ? Chứ cấm include thì có gì đó sai sai rồi.

P/S Làm thì chắc vẫn được thôi nhưng nó không hợp lý lắm.

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main()
{
	int a=4,b=2;
	bool k = a>b ? printf("So lon nhat la a"):printf("So lon nhat la b");
    
    return 0;
}

(((unsigned long long)a - b) & 0x8000000000000000ull) ? b : a;

a, b phải là int hoặc bé hơn unsigned long long nếu ko thì bó tay :V

1 Like

share link baif xem :slight_smile: :slight_smile: :slight_smile:

(tổng + abs(hiệu)) / 2 = max;
(tổng - abs(hiệu)) / 2 = min;

5 Likes

đề của thầy trong UIT mọi người ạ :v nhưng e tìm ra cách giải rồi, cám ơn mọi người

// Source : https://toidicodedao.com/2015/07/14/mot-so-cau-phong-van-thu-vi-ve-lap-trinh/ 

int getMax(int a, int b) {
   int c = a - b;
   int k = (c << 31) & 0x1;
   int max = a - k * c;
   return max;
}

Không cho dùng shift luôn :smiley: vì shift cũng viết là 2 dấu <. No branching (ternary cũng giống if :smiley: ) thì hay xài.

1 Like

nếu đề có cho pascal :

// implement từ code trên
function getMax(a, b : integer) : integer;
    var c, k, max : integer;
    begin
        c := a - b;
        k := (c SHL 31) AND 1;
        Exit(a - (k * c));  
    end;
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?