что не так с моим решением 3n + 1? - PullRequest
0 голосов
/ 14 сентября 2010

Я получил неправильный ответ от обоих онлайн-судей.

#include <stdio.h>

int main(int argc, char * argv[])
{
 long long i=0;
 long long j=0;
 long long p=0;
 long long q=0;
 long long larger;
 long long smaller;
 long long cycle_length=1;
 long long max_cycle_length=1;

 while (scanf("%lld %lld",&p,&q) !=EOF)
 {
  /*check validity of input*/
  if (p <= 0 || p >= 1000000 || q <= 0 || q >= 1000000) continue;
  max_cycle_length=1;
  if (p > q)
  {
   larger = p;
   smaller = q;
  }
  else
  {
   larger = q;
   smaller = p;
  }
  for (i=smaller;i<=larger;i++)
  {
   cycle_length = 1;
   /*printf("i = %lld\r\n",i);*/
   j = i;
   while (j > 1)
   {
   /*printf("j = %lld\r\n",j);*/
    if ((j % 2) == 0)
    {
     j = j / 2;
    }
    else
    {
     j = 3*j + 1;
    }
    cycle_length++;
   }
   if (cycle_length > max_cycle_length)
    max_cycle_length = cycle_length;
   /*printf("cycle_length = %lld\r\n", cycle_length);*/
  }
  printf("%lld %lld %lld \r\n",p,q,max_cycle_length);
 }
 return 0;
}

Ответы [ 3 ]

3 голосов
/ 14 сентября 2010

Проверяли ли вы свой код, используя пример ввода и вывода примера:

Sample Input

1 10
100 200
201 210
900 1000

Sample Output

1 10 20
100 200 125
201 210 89
900 1000 174

Единственные незначительные проблемы, которые я вижу:

while (scanf("%lld %lld",&p,&q) !=EOF)

вероятно должно быть:

while (scanf("%lld %lld", &p, &q) == 2)

и

printf("%lld %lld %lld \r\n",p,q,max_cycle_length);

вероятно должно быть:

printf("%lld %lld %lld\n", p, q, max_cycle_length);
2 голосов
/ 14 сентября 2010

Принимают ли онлайн-судьи C99?

long long (и их printf спецификация преобразования) типа C99.Это не было определено стандартом C89.

0 голосов
/ 14 сентября 2010

stdout открывается в текстовом режиме библиотекой еще до запуска main.Это означает, что библиотека отвечает за управление разницей в разрывах строк между вашей программой и операционной системой.

Удаление \r (и лишних пробелов) из ваших printf() вызовов

printf("%lld %lld %lld\n", p, q, max_cycle_length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...