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

1 Like

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;

Trông có vẻ đơn giản nhưng không hề đơn giản ha. Lúc đầu mình dùng toán tử điều kiện nhưng mới nhớ ra đề không cho dùng cấu trúc rẽ nhánh. Cũng may là giờ có giáo trình hướng dẫn thực hành nên dân tay ngang như tớ có thể tự tập luyện được :smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?