トップページに戻る
次のC#のサンプルへ
前のC#のサンプルへ
Cマガ電脳クラブ(第083回) 3数で大町どうさま
問題
0から9までの数字がすべてひとつずつ含まれている10桁の数を、大町数という(ただし0は左端にこない)。
ある連続した3数(n, n+1, n+2)を掛け合わせたら、大町数になったという。
そのような3数をすべて見つけてほしい。もちろん、負の数は考えない。
ソース
using System;
class Program
{
static void Main()
{
for (long n = 0; true; n++) {
long ProdVal = n * (n + 1) * (n + 2);
if (ProdVal > 9876543210) break;
//大町数は9の倍数
if (ProdVal % 9 > 0) continue;
if (IsOomatiSuu(ProdVal))
Console.WriteLine("{0}*{1}*{2} = {3}", n, n + 1, n + 2, ProdVal);
}
}
//大町数かを判定
static bool IsOomatiSuu(long pTargetNum)
{
if (pTargetNum < 1234567890) return false;
if (pTargetNum > 9876543210) return false;
bool[] IsAppearedArr = new bool[10];
long CopiedVal = pTargetNum;
do {
long ModVal = CopiedVal % 10;
//同じ数字を2個以上含んだらNG
if (IsAppearedArr[ModVal]) return false;
IsAppearedArr[ModVal] = true;
} while ((CopiedVal /= 10) > 0);
return true;
}
}
実行結果
1267*1268*1269 = 2038719564
1332*1333*1334 = 2368591704
解説
ナイーブに実装してます。