不用任何條件語句或運算子求兩個不同數字中的較大者


在這個問題集中,我們將得到任意兩個不同的正數,例如a和b,我們需要在C++中不用任何條件語句(if-else)或運算子(<,>,==,!=,等)返回兩個不同數字中的較大者。

問題的難點在於,我們需要在不使用任何運算子或條件語句的情況下確定任意兩個不同的正數中的較大者。

例如:

輸入:x=12, y=20

輸出: 20

輸入:x=3, y=2

輸出: 3

以下是我們將用來解決此問題的演算法。

演算法

我們將使用型別轉換來解決這個問題。型別轉換包括將一種資料型別轉換為另一種資料型別。例如,我們可以使用型別轉換將int資料型別轉換為long long資料型別,或者將int資料型別轉換為布林資料型別。

在此問題中,我們將使用int到布林的型別轉換來確定任意兩個不同的正整數中的較大者。可以用下面的表示式更好地解釋:

$$\mathrm{x *\:(bool)\:(\frac{x}{y})\:+\:y\:*\:(bool)\:(\frac{y}{x})}$$

(資料型別)表示式是型別轉換的語法,我們可以傳入任何我們想要轉換的資料型別。

上面的等式將按如下方式工作以給出我們期望的輸出:

  • 將值${\frac{x}{y}}$轉換為布林型別後的結果,如果x>y則為1,如果y>x則為0。

  • ${\frac{y}{x}}$也是一樣的。轉換為布林型別後,如果y>x則返回1,如果x>y則返回0。

  • 簡單來說,將任何值從int資料型別轉換為布林資料型別,如果int值大於或等於1則返回1,如果小於1則返回0。

因此,上面的表示式將返回x+0或0+y,取決於x或y哪個更大。讓我們用一個例子更好地理解這一點。

假設我們得到x=5和y=3。

上面的表示式將是$\mathrm{5 *\:(bool)\:(\frac{5}{3})\:+\:3\:*\:(bool)\:(\frac{3}{5})}$

由於5/3大於1,因此將其轉換為布林資料型別將得到1,而3/5小於1,因此轉換為布林型別後將得到0。因此,表示式將變為:

$$\mathrm{5 * 1 + 0, 等於 5.}$$

5是5和3中較大的數字。因此,5是期望的輸出。

方法

  • 我們將建立一個函式來確定兩個數字中較大的數字。

  • 初始化一個名為num的變數,以儲存表示式$\mathrm{x *\:(bool)\:(\frac{x}{y})\:+\:y\:*\:(bool)\:(\frac{y}{x})}$給出的值。

  • 它將給出x或y中較大的一個。

  • 返回num,這就是我們需要的輸出。

示例

以下是上述方法的C++實現:

#include <stdio.h>
#include<bits/stdc++.h>

using namespace std;

//function to get the larger number among two distinct positive numbers
int larger(int x, int y){
   //type casting to boolean data type
   int num= x * (bool) (x/y) + y * (bool) (y/x); //to store larger number
   
   return num;
}

//Driver Code
int main(){
   int x=28,y=20;
   cout<<larger(x,y)<<endl;
   
   x=8, y=13;
   cout<<larger(x,y)<<endl;
   
   return 0;
}

輸出

28
13

時間複雜度:O(1),因為執行操作需要常數時間。

空間複雜度:O(1),因為它不使用額外的空間。

結論

在本文中,我們嘗試解決在不使用任何條件語句或運算子的情況下確定兩個不同的正數中較大數的問題。我們使用了型別轉換為布林的的概念,使用特定的表示式獲得了所需的輸出。

我希望您覺得這篇文章有幫助,並且它澄清了您關於這個問題的所有概念。

更新於:2023年3月14日

2K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.