オラ計画39題、42題

1465 ワード

pが直角三角形の周長である場合、三角形の三辺長{a,b,c}は整数である.p=120の場合、3つの解があります.
{20,48,52}, {24,45,51}, {30,40,50}
1000以下のpのうち,どれが最も多くの解を生み出すことができるか.
use strict;
use warnings;

my ($most,$p);
$most=0;
$p=12;
for my $i (12..1000)
{
	my $cout=0;
	for my $j (1..$i/2)
	{
		for my $k (1..$i/2)
		{
			if ($j*$j+$k*$k==($i-$j-$k)*($i-$j-$k))
			{
				$cout++;
			}
			else
			{
				next;
			}
		}
	}
	if ($cout>$most)
	{
		$most=$cout;
		$p=$i;
	}
	else
	{
		next;
	}
}
print "$p
";

三角形数シーケンスのn番目の項目の定義は、tn=½n(n+1); 最初の10個の三角形の数は次のようになります.
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
1つの単語の各アルファベットのアルファベットの位置値を加算することで、1つの単語を1つの数に変換できます.例えば、単語SKYの値は19+11+25=55=t 10である.単語の値が三角形の数であれば、この単語を三角形の単語と呼びます.words.txt
(右クリックで名前を付けて保存)は16 Kのテキストファイルで、2千近くの常用英語単語が含まれています.この書類には全部で何個の三角形語がありますか.
原題リンク:Problem 42
use strict;
use warnings;

my (%hash,$sum);
for my $i (1..1000)
{
	my $number=$i*($i+1)/2;
	$hash{$number}="A";
}

my $cout=0;
my	$in_in = "words.txt";
open  my $in, '<', $in_in or die "cannot open
"; while(<$in>) { chomp; my @word=split/,/,$_; foreach my $word (@word) { $sum=0; my $length=length($word); for my $j (1..($length-2)) { my $zi_mu=substr($word,$j,1); $sum=$sum+ord($zi_mu)-64; } if (exists $hash{$sum}) { $cout++; } else { next; } } } close $in; print "$cout
";