PHP算法02
PHP算法02
PHP算法02
01). 输出 1 到 100 之间的素数(质数)
用一个数分别去除2到这个数之间的所有数,如果被整除就是素数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
for ($i = 1; $i <= 100; $i++) { $k = 0; for ($j = 1; $j <= $i; $j++) { if ($i % $j == 0) { $k++; } } if ($k == 2) { echo $i; echo " "; } }
|
02). 打印出所有的 “水仙花数 “
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
for ($i = 100; $i < 1000; $i++) { $hunderds = floor($i / 100); $tens = floor($i / 10) % 10; $ones = floor($i % 10); $temp = pow($hunderds, 3) + pow($tens, 3) + pow($ones, 3); if ($temp == $i) { echo $i; echo " "; } }
|
03). 正整数分解质因数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
$n = 90; echo $n . '='; for ($i = 2; $i < $n + 1; $i ++){ while ($n % $i == 0 && $n != $i) { $n /= $i; echo $i . "*"; } if ($n == $i) { echo $i; break; } }
|
04). 三目条件嵌套
1 2 3 4 5 6 7 8 9 10
|
$score = 89;
$grade = $score >= 90 ? 'A' : ($score >= 60 && $score <= 89 ? 'B' : "C");
echo $grade;
|
05). 输入两个正整数m和n,求其最大公约数和最小公倍数
最大公约数 =(A×B)/ 最小公倍数; 公式:由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。
辗转相除法, 又名欧几里德算法,是求最大公约数的一种方法。以除数和余数反复做除法运算,最终当余数为 0 时,取当前算式除数为 最大公约数。算法举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
function f($x, $y) { if ($x < $y) { $temp = $x; $x = $y; $y = $temp; } while ($y!=0) { if ($x==$y){ return $x; }else{ $k = $x % $y; $x = $y; $y = $k; }; } return $x; } $a = 21; $b = 24; $m = f($a, $b); $n = $a * $b / $m; echo '最大公约数为: ' . $m." "; echo '最小公倍数为: ' . $n." ";
$gcd = gmp_gcd("21", "24"); echo gmp_strval($gcd) . "\n";
|
06) 求s=a+aa+aaa+aaaa+aa…a的值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
function fun($num, $count) { $temp = 0; $sum = 0; for ($i = 0; $i < $count; $i++) { $temp = $temp + $num; $sum = $sum + $temp; $num = $num * 10; } return $sum; }
echo fun(2, 5);
|
07) 完数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
function fun() { echo "1到1000的完数有: "; for ($i = 1; $i < 1000; $i++) { $t = 0; for ($j = 1; $j <= $i / 2; $j++) { if ($i % $j == 0) { $t = $t + $j; } } if ($t == $i) { echo($i ." "); } } }
fun();
|
08) 四个数字组成三位数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
function fun() { $x = 0; $y = 0; $z = 0; $arr = []; $_count = 0;
for ($x = 1; $x < 5; $x++) { for ($y = 1; $y < 5; $y++) { for ($z = 1; $z < 5; $z++) { if ($x != $y && $y != $z && $x != $z) { $_count++; array_push($arr, $x * 100 + $y * 10 + $z); } } } } array_push($arr, ['count' => $_count]); return $arr; }
print_r(fun());
|
09) 某年某月某日,第几天
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| function fun($year,$month,$day) { switch ($month) { case 1:$sum=0;break; case 2:$sum=31;break; case 3:$sum=59;break; case 4:$sum=90;break; case 5:$sum=120;break; case 6:$sum=151;break; case 7:$sum=181;break; case 8:$sum=212;break; case 9:$sum=243;break; case 10:$sum=273;break; case 11:$sum=304;break; case 12:$sum=334;break; default:printf("data error");break; } $sum = $sum + $day; if ($year % 400 == 0 || ($year % 4 == 0 && $year % 100 != 0)) { $leap = 1; } else { $leap = 0; } if ($leap == 1 && $month > 2) { $sum++; } return $sum; }
print_r(fun(2019, 03, 1));
|
10) 三元运算符及比较3个数的大小,输出最大的数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| function fun($a,$b,$c) { $d= $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c); return $d; }
echo fun(1, 2, 3);
function fun($i, $j, $k) { $x = 0; if ($i > $j) { $x = $i; $i = $j; $j = $x; } if ($i > $k) { $x = $i; $i = $k; $k = $x; } if ($j > $k) { $x = $j; $j = $k; $k = $x; } return $i . " " . $j . " " . $k; }
echo fun(10, 0, 3);
|