[Найдена] Найдите плиз ошибку

agent007new

В общем, предыстория такова. Есть сайтец www.programming-challenges.com, на котором можно поскиляться в решении алгоритмических задачек. Решил я этим позаниматься. Делаю первую задачу (вроде, совсем примитивная):
 
The 3n + 1 problem
Consider the following algorithm to generate a sequence of numbers. Start with an integer n. If n is even, divide by 2. If n is odd, multiply by 3 and add 1. Repeat this process with the new value of n, terminating when n = 1. For example, the following sequence of numbers will be generated for n = 22:
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
It is conjectured (but not yet proven) that this algorithm will terminate at n = 1 for every integer n. Still, the conjecture holds for all integers up to at least 1, 000, 000.
For an input n, the cycle-length of n is the number of numbers generated up to and including the 1. In the example above, the cycle length of 22 is 16. Given any two numbers i and j, you are to determine the maximum cycle length over all numbers between i and j, including both endpoints.
Input
The input will consist of a series of pairs of integers i and j, one pair of integers per line. All integers will be less than 1,000,000 and greater than 0.
Output
For each pair of input integers i and j, output i, j in the same order in which they appeared in the input and then the maximum cycle length for integers between and including i and j. These three numbers should be separated by one space, with all three numbers on one line and with one line of output for each line of input.
Sample Input
1 10
100 200
201 210
900 1000
Sample Output
1 10 20
100 200 125
201 210 89
900 1000 174
  

Написал такую вот программку - без каких-либо ухищрений:
 

#include <iostream>

size_t count(unsigned long long val)
{
size_t result = 1;
while (val != 1)
{
++result;
if (val % 2)
val = 3 * val + 1;
else
val /= 2;
}

return result;
}

size_t calculate(size_t from, size_t to)
{
size_t result = 0;
for (size_t i = from; i <= to; ++i)
{
size_t cur = count(i);
if (result < cur)
result = cur;
}
return result;
}

int main(int argc, char* argv[])
{
while (std::cin)
{
size_t min = 0;
std::cin >> min;
if (!std::cin)
break;

size_t max = 0;
std::cin >> max;

std::cout << min << " " << max << " " << calculate(min, max) << "\n";
}

return 0;
}

На примере она работает правильно, но сабмичу им - говорят неправильно. Причем неправильно, на сколько я понял, не в проблемах компиляции, перерасходе памяти/времени или неправильном формате вывода, а в том, что все-таки на каком-то тесте выдает неправильный результат. Все уже здесь пересмотрел - ну, вроде, негде тут ошибиться. Может все-таки кто-нибудь заметит ошибку и подскажет?

vall

1 999999 оно у тебя сколько считает? :lol:
524287 тоже интересное число =)
> size_t
в c++ это имеет какой-то другой от общепринятого смысл?

agent007new

1 999999 оно у тебя сколько считает?
По времени или результат?
Если по времени - где-то секунда, результат - 525
524287 тоже интересное число =)
Чем оно интересно? Ответ 178
> size_t
в c++ это имеет какой-то другой от общепринятого смысл?
А какой общепринятый? 32-битное беззнаковое в моем случае

SPARTAK3959

maximum cycle length for integers between and including i and j
Думать над значением этого слова. В его неправильном понимании вся загвоздка задачи.

6248874

Как вариант
В задаче нигде не сказано, что i <= j, а твоя прога по ходу дела это не проверяет. Может они дают в одном из случаев в инпут например 200 100. Попробуй переставлять их местами
upd: опередили

vall

ИМХО задача имеет значительно более быстрое решение, но если она совсем уже простая и приемлет такое переборное решение то проблема может быть в числе 1.

vall

>>524287 тоже интересное число =)
>Чем оно интересно?
последовательностью

agent007new

Спасибо, косяк был действительно в этом

agent007new

ИМХО задача имеет значительно более быстрое решение, но если она совсем уже простая и приемлет такое переборное решение то проблема может быть в числе 1.
Это типа разминочной задачи. На счет более быстрого решения, оно есть - мое решение у них выполнялось 0.064 секунды (не то, которое я здесь запостил; которое я здесь запостил выполняется 0.4 секунды самое лучшее - 0.008

pitrik2

www.programming-challenges.com
о блин, понаделали плагиатов
ты эйлера уже прошел всего? :)

agent007new

ты эйлера уже прошел всего?
Не знаю, что это такое. Я только начал решать всякие задачки, поэтому ничего пока еще не прошел

pitrik2

Не знаю, что это такое. Я только начал решать всякие задачки, поэтому ничего пока еще не прошел
http://projecteuler.net/

agent007new

Спасибо, посмотрю, что там есть, но, думаю, что твой сайтец был позднее сделан: programming-challenges - это сайтец для удобства чтения книжки избранных задач с online-judge (на этом сайте просто некоторое подмножество задач оттуда который был пораньше сделан. Но это, в принципе, не суть
Оставить комментарий
Имя или ник:
Комментарий: