php排列组合算法,要求70个字符以内 $n=$_GET['n'];$k=$_GET['k'];if(!(($n<0 && $n>100) || $k<0)){for($i=1;$i<=$n;$i++){$n1=1*$i;}for($j=1;$j<=$k;$j++){$k1=1*$j;}for($x=1;$x<=($n-$k);$x++){$x1=1*$x;}$out=$n1/$k1*$x1;//echo $out;} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最开始我用的是递归,好像用了110字符。光function 这几个字就浪费了8个字符,加上(){},以及调用,浪费太多字符了。把函数调用去掉,程序全在一行里,变量名都是最短,文件最后的?>这两个字符也去掉了,但还是有90个字符。离70个字符还差远了 我把我的算法帖出来吧<?list($n,$k)=split(',',fgets(STDIN));for($p=$i=1;$i<=$k;)$p*=($n-$k+$i)/$i++;echo $p;[ 上面最后多了个[,$p;就结尾了,没有 ?> ,这样省两个字符<?list($n,$k)=split(',',fgets(STDIN));for($p=$i=1;$i<=$k;)$p*=($n-$k+$i)/$i++;echo $p; 说一下我的思路:C(n,k)=n!/k!*(n-k)! 拆成两个数的积 一个是 n!/(n-k)! 一个是 1/k!n!/(n-k)!算出来就是 (n-k+1)* (n-k+2)* (n-k+3)* .. (n-k+k) 共k个数相乘1/k! 也是k个数相乘 1 * 2 * 3 * .. kC(n,k)= (n-k+1)/1 * (n-k+2)/2 * .. (n-k+k)/k可以放到一个循环里for($result=$i=1;$i<=$k;$i++){ $result=$result* ($n-$k+$i)/$i;}感觉自已代码已经很短了,但也要90个字符。最高纪录好像是60几个字符,不知他们的算法是什么 <?list($n,$k)=fscanf(STDIN,"%d,%d");$r=1;while($k)$r*=$n--/$k--;echo$r;好象是71个,如果不包括开头的<?的话,勉强合格... 又改了一下,这下就算加上后面的?>也只有70个了。其实关键是怎么读,不是怎么算,呵呵。<?fscanf(STDIN,"%d,%d",$n,$k);$r=1;while($k)$r*=$n--/$k--;echo$r; 关于php页面刷新问题。 关于类。 mvc中如下结构该怎么改代码? PHP 文本编辑 php 里的 -> => 什么意思,什么作用 wamp启动之后网页显示不完全 求救能力测试题 请进来帮一下忙,同时有好东西共享:) 图片处理:GD图库生成的图片有失真? 送分!哪里的虚拟主机比较好? 求:超长字符变量解决办法 请教一个sql查询
把函数调用去掉,程序全在一行里,变量名都是最短,文件最后的?>这两个字符也去掉了,但还是有90个字符。
离70个字符还差远了
$p;就结尾了,没有 ?> ,这样省两个字符
<?list($n,$k)=split(',',fgets(STDIN));for($p=$i=1;$i<=$k;)$p*=($n-$k+$i)/$i++;echo $p;
C(n,k)=n!/k!*(n-k)! 拆成两个数的积 一个是 n!/(n-k)! 一个是 1/k!
n!/(n-k)!算出来就是 (n-k+1)* (n-k+2)* (n-k+3)* .. (n-k+k) 共k个数相乘
1/k! 也是k个数相乘 1 * 2 * 3 * .. k
C(n,k)= (n-k+1)/1 * (n-k+2)/2 * .. (n-k+k)/k
可以放到一个循环里
for($result=$i=1;$i<=$k;$i++){
$result=$result* ($n-$k+$i)/$i;
}
感觉自已代码已经很短了,但也要90个字符。
最高纪录好像是60几个字符,不知他们的算法是什么
好象是71个,如果不包括开头的<?的话,勉强合格...
其实关键是怎么读,不是怎么算,呵呵。
<?fscanf(STDIN,"%d,%d",$n,$k);$r=1;while($k)$r*=$n--/$k--;echo$r;