Другое "Почему мое решение Uva 3n + 1 не принимается?" вопрос - PullRequest
0 голосов
/ 23 июля 2011

Почему мое решение не работает?

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=36

Я написал это в предположении, что источником данных был stdin.

Я полностью ожидаю, что онопроблема с моим кодом, но я не понимаю, почему в результате получаю «Неправильный ответ».(Выбор компилятора был ANSI C)

EDIT: изменен так, чтобы позволить параметру 1> параметр 2 (но теперь я получаю «ошибку представления», что бы это ни было)

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char * argv[])
{
  unsigned int p1;
  unsigned int start;
  unsigned int end;
  unsigned int current;
  unsigned int n;
  unsigned int p2;
  unsigned int max_cycle = 0;
  unsigned int current_cycle;

  while(scanf("%u %u", &p1, &p2) != EOF){
    max_cycle = 0;
    start = (p1 < p2 ? p1 : p2);
    end = (p1 < p2 ? p2 : p1);
    current = start;
    while(current <= end){
        n = current;
        current_cycle = 0;
        while(n > 1) {
          if(n & 1)
            n = 3*n+1;
          else
            n = n/2;
          current_cycle++;
        }
        current_cycle++;
        if (max_cycle < current_cycle) max_cycle = current_cycle;
        current++;
    }
    fprintf(stdout, "%u %u %u\n", p1, p2, max_cycle );
  }
  return 0;
}

1 Ответ

1 голос
/ 23 июля 2011

if (start == 0 || end == 0) continue; не требуется, конечное условие, где оба равны нулю, поэтому должно быть if (start == 0 && end == 0) break; Также верните 0 и сделайте его int main() (по крайней мере, в ANSI CI знают, если вы не вернете 0, это неправильно, несмотря ни на что) , Также вы предполагаете, что я

...