数学パズル
3桁の数値とその数値を2乗した値の各数字が1から9までの数字で構成されるような3桁の数値をすべて求めるプログラムを作成せよ。
例えば 763*763=582169 となるが、これは、1,2,3,5,6,7,8,9 からなり、4が抜けているからダメ。
C#
var list = from x in Enumerable.Range(100,900) where ( from z in ((x * x).ToString() + x.ToString()).ToCharArray().Distinct() where z != '0' select z ).Distinct().Count() == 9 select x;
VB
Dim list = From x In Enumerable.Range(100, 900) _ Where _ ( _ From z In ((x * x).ToString() & x.ToString()).ToCharArray().Distinct() Where z <> "0"c Select z _ ).Count = 9 _ Select x
最終的に生成される文字列が0を含んでいなくて、重複していなくて、9桁なら、問題の条件を満たすというロジックです。
追記:NyaRuRuさんに教えてもらったので、toCharArrayをなくすついでにいろいろといじったバージョン(C#のみ)
var list = from x in Enumerable.Range(100, 900) where (x*1000000+x*x).ToString().Distinct().Where(s => s != '0').Count() == 9 select x;