欧拉计划第15题;图示法和组合法分别解决。第十六题:2的1000次方

十五题还是比较有意思的题目,不过高中就已经学习过了。只不过高中只会让你写一个过程,而这里让你用电脑把最后的结果算出来:

我们还是先来看一下题目:

从一个22网格的左上角开始,有6条(不允许往回走)通往右下角的路。

 

欧拉计划第15题;图示法和组合法分别解决。第十六题:2的1000次方_第1张图片

对于2020的网格,这样的路有多少条?


我们先用组合法:

20*20的方格中,从左上角到右下角,不论怎么走,都只需要40步,其中必然有20步时横着走,20步时竖着走,你可以先全部先横着走,然后竖着走。所以这个问题变成了从40步中取出20步一共有多少种方法?用排列组合C(20上)(40下)

程序如下:

use bignum;
$sum0=1;
$sum1=1;
for($i=40;$i>20;$i--)
{
	$sum0=$sum0*$i;
}
print"$sum0\n";
for($j=20;$j>0;$j--)
{
	$sum1=$sum1*$j;
}
print "$sum1\n";
$sum=$sum0/$sum1;
print $sum."\n";

另一种解题思路是百度的:

0  1  1   1    1
1  2  3   4    5
1  3  6  10  15
1  4 10 20 35
1  5 15 35 70

每个数代表走到此处的走法,是它上方和左边的两个数之和。
use strict;
use warnings;

my @sum;
my $i;
my $j;

for($i=0;$i<21;$i++)
{
	for($j=0;$j<21;$j++)
	{
		$sum[$i][0]=1;
        $sum[0][$j]=1;
	}
}
for($i=1;$i<21;$i++)
{
	for($j=1;$j<21;$j++)
	{
		$sum[$i][$j]=$sum[$i-1][$j]+$sum[$i][$j-1];
	}
}
print $sum[20][20];

这里要注意的是:20*20的方格,每一条线上,有21个点。所以在循环的时候要注意。
 
 

十六题:

215 = 32768 并且其各位之和为 is 3 + 2 + 7 + 6 + 8 = 26.

21000 的各位数之和是多少?

不知道这个题目有什么技巧没有!
但是对我来说确实很简单;
我这里分成两步来做:
首先求出2的100次方;
然后用vim处理一下数据;
然后把他们相加。
程序如下:
use strict;
use warnings;
use bignum;

my $num;

$num=2**1000;
print $num."\n";
这里我们得到结果:
C:\WINDOWS\system32\cmd.exe /c perl "F:\perl\b.pl"
10715086071862673209484250490600018105614048117055336074437503883703510511249361
22493198378815695858127594672917553146825187145285692314043598457757469857480393
45677748242309854210746050623711418779541821530464749835819412673987675591655439
46077062914571196477686542167660429831652624386837205668069376
Hit any key to close this window...


有些同学可能会接着用程序处理的方法,但是我想,把他们复制出来,然后在每个数字后面加上一个加号更简单高效。处理的过程因为有了vim而变的异常简单,因为vim有宏处理。
处理结果如下:
$sum=1+0+7+1+5+0+8+6+0+7+1+8+6+2+6+7+3+2+0+9+4+8+4+2+5+0+4+9+0+6+0+0+0+1+8+1+0+5+6+1+4+0+4+8+1+1+7+0+5+5+3+3+6+0+7+4+4+3+7+5+0+3+8+8+3+7+0+3+5+1+0+5+1+1+2+4+9+3+6+1+2+2+4+9+3+1+9+8+3+7+8+8+1+5+6+9+5+8+5+8+1+2+7+5+9+4+6+7+2+9+1+7+5+5+3+1+4+6+8+2+5+1+8+7+1+4+5+2+8+5+6+9+2+3+1+4+0+4+3+5+9+8+4+5+7+7+5+7+4+6+9+8+5+7+4+8+0+3+9+3+4+5+6+7+7+7+4+8+2+4+2+3+0+9+8+5+4+2+1+0+7+4+6+0+5+0+6+2+3+7+1+1+4+1+8+7+7+9+5+4+1+8+2+1+5+3+0+4+6+4+7+4+9+8+3+5+8+1+9+4+1+2+6+7+3+9+8+7+6+7+5+5+9+1+6+5+5+4+3+9+4+6+0+7+7+0+6+2+9+1+4+5+7+1+1+9+6+4+7+7+6+8+6+5+4+2+1+6+7+6+6+0+4+2+9+8+3+1+6+5+2+6+2+4+3+8+6+8+3+7+2+0+5+6+6+8+0+6+9+3+7+6;
print $sum."\n";

接着运行一下就Ok了
结果如下:
C:\WINDOWS\system32\cmd.exe /c perl "F:\perl\c.pl"
1366
Hit any key to close this window...























 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

你可能感兴趣的:(欧拉计划第15题;图示法和组合法分别解决。第十六题:2的1000次方)