2015-11-16 2 views
0

Так что я удалил свой пост некоторое время назад, и я покажу вам свою работу до сих пор. В принципе, я новичок, и я надеюсь, что ты сможешь помочь мне в этом, потому что я изо всех сил пытаюсь понять, что делать дальше.Как добавить ограничения и условия в JAVA?

public class Display{ 
    public static void main(String args[]){ 
     Scanner input = new Scanner(System.in); 
     //int testcase = input.nextInt(); 
     int n = 0, even = 0; 

     //while(input.hasNext()){ 
     n = input.nextInt(); 
     while(n != 1){ 
      if(n%2 == 0){ 
       //even++ then n/=2 
       even++; 
      } 
      else{ 
       //n = 3n+1 
      } 
      //sequence ctr++ 
     } 
     System.out.println(even); 
     //output 
    } 
} 

Так что мой профессор попросил нас сделать 3n + 1 проблема/Коллатца Гипотезу и вот некоторые из условий.

Для ввода N длина цикла N равна числу чисел, сгенерированных до 1 включительно и включая 1. В приведенном выше примере длина цикла 22 равна 16. Учитывая число N, вы должны определить абсолютная разница между длиной цикла N и число четных чисел, генерируемых из последовательности исходного Н.

Ограничения:

1 <= T <= 100000 
1 <= N <= 1000000 

Входной формат Первая строка входного файла содержит целое число T, указывающее количество теста случаев. Строки T следуют. Каждая Т строка содержит число N. Output Format Для каждого значения N, отображать абсолютную разность между длиной цикла N и число четных чисел, генерируемых из последовательности запуска N. Пример ввода

4 
10 
34 
22 
18237 

Пример вывода

2 
4 
5 
55 

Объяснение Для тестового случая N = 10; сгенерированная последовательность составляет 10 - 5 - 16 - 8 - 4 - 2 - 1 с длиной цикла 7. В последовательности есть 5 четных чисел, которые равны 10, 16, 8, 4 и 2. Ответ 7 - 5 = 2.

+3

Если вы новичок и имеете профессора, у вас есть сокурсники, с которыми можно сотрудничать? Это может быть проще и быстрее. –

+5

, пожалуйста, не теряйте свой пост. – rene

+0

Но кто-то может удалить это сообщение для меня? –

ответ

2

Итак, что вы теряете в своем коде? Взгляните на это. Вы должны изменить n на каждой итерации. В зависимости от вашего требования это нужно делать по-разному для четных и нечетных чисел. Это то, чего вам не хватает в вашей петле. С другой стороны, вы отслеживаете количество четных чисел, которые действительно происходят, но вы забыли отслеживать общее количество операций, вызванных в вашем цикле.

Вот как ваш код может выглядеть с некоторыми комментариями в качестве объяснения.

public static void main(String args[]){ 
    Scanner input = new Scanner(System.in); 
    int n = 0; 
    int even = 0; 
    // You need a variable to count each iteration. One iteration is one mathematical operation on the number. So after each iteration a new number is generated 
    // We start with 1 since we have a number that we input. 
    int count = 1; 
    System.out.println("Please input a number"); 
    n = input.nextInt(); 
    while(n != 1){ 
     if(n%2 == 0){ 
      // The first thing missing. You didn´t change n the condition is ok 
      // By calling n/2 you change n as your requirement says. Devide n by two if it is even 
      n/=2; // We assign and divide n by two in one step by using /= 
      ++even; 
     } 
     else{ 
      // A small syntax mistake. you code said n = 3n+1 
      // But 3n isn´t known to the java compiler and you would need to tell java what mathematical operation you would like to have here. 
      // That´s where 3*n is valid. 
      n = 3*n+1; 
     } 
     // The next thing is here. you said you would need to have the total 
     // amount of numbers after each iteration. so you just need to 
     // increase it buy one after each iteration. One iteration would be one mathematical operation on your number. 
     ++count; 
     System.out.println("n is now " + n); 
    } 
    System.out.println("we had " + even + " even numbers"); 
    System.out.println("we had " + count + " total numbers"); 
    // Now that you keep track of both, the total amount of numbers and the even numbers you would need to simply subtract them from each other to get your result. 
    System.out.println("Resulting in total - even as:" + (count-even)); // Just subtract and print out your expected Output. 
} 
+0

Uhmmm, так мне нужно добавить больше в мой код? –

+0

@Geomxy как я описал, вам нужно было изменить значение вашего номера 'n' и отслеживать количество итераций в вашем цикле. Остальное сработало бы. – SomeJavaGuy

+0

Как? Извините, если я действительно не понимаю. ; -; –

Смежные вопросы