PHP经典算法(六)
2019-12-18 09:32:03 来源:admin 点击:740
【程序6】题目:一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,请问该数是多少?
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:
刚开始不知道怎么判断一个数字是否为完全平方数,但是根据php的基本函数sqrt和pow可以间接进行判断
若开方后进行取整再平方等于原数字,那么这个数字则为一个完全平方数,根据这个方法进行判断
public function actionWhitchNum()
{
for ($i=1;$i<=100000;$i++)
{
if(pow((int)sqrt($i+100),2) == ($i+100) &&pow((int)sqrt($i+168),2) == ($i+168) )
{
echo $i;
}
}
echo 'ok';
}
【程序7】 题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。 刚开始看这题以为有什么简单的方法,但是我没有想到,没有办法,只能用这种方法了
public function actionToday()
{
$today = '2018-03-05'; // 格式固定
$days = explode('-',$today);
$year = $days[0];
$month = (int)$days[1];
$day = (int)$days[2];
// 判断是否为闰年
$flag = false;
if($year%400==0||($year%4==0&&$year%100!=0))
{
$flag = true;
}
// 对月份进行判断 1,3,5,7,8,10,12 为31天
// 4,6,9,11 为30天
// 2月份闰年为29天,否则为28天
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:
break;
}
$sum = $sum + $day;
if($flag && $month>2)
$sum = $sum + 1;
var_dump($sum);
}