不用任何条件语句或运算符求两个不同数字中的较大者


在这个问题集中,我们将得到任意两个不同的正数,例如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+ 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告