原问题如下

php百度知道问题

问题分析:数字只有五个 1-5,不能含有6 7 8 9 0,且数字不能重复出现,如:11111就不满足条件。

显示结果个数分析:

所有可能个数

5*4*3*2=120

减去中间为4的所有数字

120-4*3*2=120-24=96

减去所有35 53

96- (3*2)*4*2=48

加上 53 35相连且中间为4的

48+(2*2)*2=56个数

----------------

看php代码:

<?php
function isoka($n)
{
    if(substr($n,2,1)=="4" || strstr($n,"35") || strstr($n,"53") || strstr($n,"6") || strstr($n,"7") || strstr($n,"8") || strstr($n,"9")) 
        return false;
    else
        return true;
}
//数字可重复情况
/*
$j=0;
for($i=11111;$i<=55555;$i++)
{
    if(isoka($i))
    {
        echo $i."&nbsp; ";
        $j++;
    }
}
echo "
---------完毕$j" */ //数字不可重复情况下 function isokb($n) { $c=true; $n="|-|".$n; for($k=1;$k<=5;$k++) { if(!strpos($n,(string)$k)) { $c=false; break; } } return $c; } $j=0; for($i=12345;$i<=54321;$i++) { if(isoka($i) && isokb($i)) { echo $i."&nbsp; "; $j++; } } echo "
---------输出完毕,共".$j."个数
"; ?>

有几个地方需要说明

1、strstr(),返回的结果是字符(串)或者false,但是字符0在php中也是false,这里情况特殊,没有数字0,所以strstr()返回的结果要么是true(包含字符)要么是false(不包含字符),

2、由于数字不能重复出现,所以如果某个数中没有出现1则表示该数中肯定有某个数字是重复的。因为长度一定了,五个数字五位数。

3、strpos()返回字符串在另一个字符串中的位置,返回值是数字(>=0)或者false。如果位置是0,则表示第一位,实际上是出现了的,但是php中0表示false,很容易就弄成了不包含,此时如果我们将原来的字符串前面加上一个字符串 比如"|_|",那么如果出现的位置大于2,那肯定包含了,如果不包含当然是返回false,