使用基本数学函数对C中的整数进行排序

Sea*_*ean -5 c sorting integer-math

我试图用C编写一个程序

给定三个唯一的非负int类型数字的输入,程序应该对它们进行排序并输出它们按递增顺序排序.对于此程序,仅允许基本的数学结构.(+,-,/,*,%)

输入的示例将是:

输入三个整数:32 29 21

然后,示例输出应该是:

排序的数字:21 29 31

使用逻辑运算符,像> <==以及选择语句if for,并switch明确不允许的.

nne*_*neo 8

这有点棘手.仅使用"数学"算术函数,我认为不可能(即在实数上使用真正的数学运算符).

但是,幸运的是,这是C,我们有整数运算,如整数除法.整数除法具有a/b == 0if a<ba/b > 0if 的有用属性a>b.我们可以利用它编写一个min函数,从你输入的两个中返回较小的数字:

unsigned math_min(unsigned a, unsigned b) {
    a++; b++; // ensure neither a nor b is zero
    unsigned c = ((a/b)*b + (b/a)*a) / ((a/b) + (b/a));
    return c-1; // correct for earlier increment
}
Run Code Online (Sandbox Code Playgroud)

这通过计算a/b*b和工作b/a*a.如果我们假设a并且b彼此不同并且是正面的,则其中恰好其中一个将是非零的 - 对应于较小值的那个.(实际上,即使a==b在那种情况下我们加上a+b并除以2 ,这个函数也能工作).

使用这个"仅数学" min功能,您应该能够实现排序操作; 这是一个练习.