Php 当值x与模3的值y相比正好大于1时进行测试
在模意义上(mod 3),如何检查x比y大1(超前) 这是当x=0和y=2,当x=1,y=0和当x=2,y=1时 我尝试过这样的测试:Php 当值x与模3的值y相比正好大于1时进行测试,php,modulo,modular-arithmetic,Php,Modulo,Modular Arithmetic,在模意义上(mod 3),如何检查x比y大1(超前) 这是当x=0和y=2,当x=1,y=0和当x=2,y=1时 我尝试过这样的测试: php -a php > $x = 0; php > $y = 2; php > echo ($x - $y) % 3; -2 php > $x = 1; php > $y = 0; php > echo ($x - $y) % 3; 1 php > $x = 2; php > $y = 1; php > e
php -a
php > $x = 0;
php > $y = 2;
php > echo ($x - $y) % 3;
-2
php > $x = 1;
php > $y = 0;
php > echo ($x - $y) % 3;
1
php > $x = 2;
php > $y = 1;
php > echo ($x - $y) % 3;
1
对于x=0和y=2的情况,它不起作用。我如何计算它,使$x在模意义上比$y“超前”1
为什么您使用0表示x
,使用2表示y
?(对不起,我不是一个爱哭的人。)
虽然你的情况已经很清楚了,但当0<2
明显时,x
会比y
领先1位(至少对我来说)是没有意义的
我们知道,语句(0-2)%3
应该是-2
,因为mod是3,0-2
是-2,所以结果是-2
数学有时会有一些不合逻辑的感觉(在我看来),所以值得注意的是0根本不在2之前(在编程变量的意义上)
实际上,为了回答你的计算问题,你可以用x=0
和y=-1
作为你的变量,按照你语句的逻辑,然后两个变量都增加1,结果仍然相同
证明:
首先,我将解释我对以下句子的理解: 在模意义上(mod 3),如何检查x比y大1(超前) 根据提供的示例,我假设您的意思是,如果将1添加到$y,我们取$y的mod 3,我们将得到$x的mod 3 考虑到这一点,我们可以编写以下代码,如果$x比$y“超前”1,witch将返回true。(我希望你能将这个例子抽象为你所面临的任何情况): 如果您想要一个更通用的函数版本,具有任意的差异,您可以使用它(它应该适用于正差异和负差异): (($x-$y)%3==1)你所说的“模意义上的y中的较大者”到底是什么意思?请分享算法预期输出的详细信息
function check($x, $y, $mod) {
return $x % $mod == ($y + 1) % $mod;
}
//$x = 0 and $y = 2
echo check(0,2,3); //returns true
//$x = 1 and $y = 0
echo check(1,0,3); //returns true
//$x = 2 and $y = 1
echo check(2,1,3); //returns true
//$x = 0 and $y = 1
echo check(0,1,3); //returns false because $x is 2 "ahead" of $y
function check($x, $y, $mod, $diff) {
return $x % $mod == ($y + $diff) % $mod;
}