Целью этой программы является поиск самой длинной цепочки чисел, сгенерированной функцией. .
Код: Выделить всё
using System;
using System.Collections.Generic;
using System.Linq;
class LambdaTest
{
public const int MAX_NUM = 1000000;
public const bool debug = false;
static void Main(string[] args)
{
Func evenN = x => x / 2;
Func oddN = x => 3 * x + 1;
Func nextN = x => ((x & 1) == 1) ? oddN(x) : evenN(x);
int maxCnt = 0;
int maxStart=1;
var nlist = Enumerable.Range(1, MAX_NUM);
foreach (int val in nlist)
{
int cnt = countCollatzChain(nextN, val);
if(maxCnt < cnt){
maxCnt = cnt;
maxStart = val;
}
}
Console.WriteLine("Start number {0} has max chain of {1} items. ", maxStart, maxCnt);
}
static int countCollatzChain(Func f, int n){
int count = 0;
if(n == 1) { return 1; }
while(n > 1){
n = f(n);
count++;
}
return count;
}
}
Стартовый номер 910107 имеет максимальную цепочку из 475 элементов.
Подробнее здесь: https://stackoverflow.com/questions/790 ... -of-values
Мобильная версия