Основная функция не может вычислить максимальное число в цепочке значенийC#

Место общения программистов C#
Ответить
Anonymous
 Основная функция не может вычислить максимальное число в цепочке значений

Сообщение Anonymous »

Функция приведенной ниже программы не возвращает правильное значение. Это приведет к неправильному значению стартового номера и неправильному значению счетчика. Функция countCollatzChain не возвращает правильное значение. Функция ищет цепочку из более чем 500 элементов, но вывод (см. сеанс вывода) неправильный.
Целью этой программы является поиск самой длинной цепочки чисел, сгенерированной функцией. .

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»