2017-01-06 2 views
0

Вам дается сумма 1 - 3 + 5 - 7 + 9 - 11 + 13 ... Вы должны скомпилировать программу, которая (заданная целое число N) находит и отображает значение суммы в N -th addend.Сумма нечетных чисел

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

Вот мой код:

Scanner input = new Scanner(System.in); 

System.out.print("n = "); 
int n = input.nextInt(); 
int sum = 0; 

for (int i = 1; i <= n; i++) {  
    if (i % 2 != 0) { 
     sum = sum + i; 
    } 
} 

System.out.println(sum); 
+3

'сумма = сумма + i' - вы, кажется, пропустил негативы. –

+0

@BoristheSpider Да, это моя основная проблема –

+2

Вы можете получить его непосредственно с помощью 'sum = n% 2 == 0? -n: n' – fafl

ответ

2

Может быть, вы хотите, чтобы это

Если я вхожу я/р 7 это произведет -4, как о/р

for (int i = 1; i <= n; i+=2) { 
     if(i % 4 == 1) 
      sum = sum + i; 
     else 
      sum = sum - i; 
} 

в стиле @fafl (с использованием оператора Ternary), исправьте меня, если я ошибаюсь

sum += (i % 2 != 0) ? (i % 4 == 1) ? + i : - i; 

Если я вхожу я/р 7 это произведет 7, как о/р

 int n = input.nextInt(); 
     int sum = 0; 
     int addOrDedduct = 1; 
     for (int i = 1; i <= n; i++) { 
       if(addOrDedduct % 4 == 1) 
        sum = sum + addOrDedduct; 
       else 
        sum = sum - addOrDedduct; 
       addOrDedduct+=2; 
     } 
     System.out.println(sum); 

Обновление:
заявление fafl в sum = n % 2 == 0 ? -n : n продуцирующие же о/р, Здесь вы не Не нужно использовать loop
Забудьте о цикле и используйте ответ fafl.

+0

Я не спустил вниз, но попробую 'i + = 2' – fafl

+0

@shantaram_t Это работает !!! Спасибо! Но у меня есть вопрос: почему i% 4 == 1? –

+1

bcoz '(i% 4 == 1)' дает вам нет. для добавления, например. '1 = (i% 4 == 1)', '5 = (i% 4 == 1)', '9 = (i% 4 == 1)' и т. Д. И остальные числа, т. Е. 'I% 2! = 0' например '3 = (i% 2! = 1)', '7 = (i% 2!= 1) 'вы вычитаете –

0

Вы можете сделать это с помощью дополнительной переменной, чтобы проверить, если у вас есть, чтобы добавить или вычесть:

int sum = 0; 
    boolean sub = false; 
    for (int i = 1; i <= n; i++) { 
     if (i % 2 == 1) { 
      if (sub) { 
       sum -= i; 
       sub = false; 
      } else { 
       sum += i; 
       sub = true; 
      } 
     } 
    } 

Это решение немного Hacky, но он должен работать.

0

Fafl является правильным с sum = n% 2 == 0? -n: п

+1

@BoristheSpider maby i did not get the вопрос, но если n = 3, а ответ равен 3, потому что, если u получит сумму: 1 - 3 + 5 - 7 + 9 - 11 + 13 ... до 3-го diggit u get 1-3 + 5 = 3 – Bob

+0

I думайте, что вы правы; имеют право голоса. Но я думаю, вам нужно объяснить свою логику, затем отправить код, а затем объяснить код. Особенно, когда вы отвечаете на вопрос новичка. –

+0

OK ur right;) , но она сказала, что ответ shantaram_t прав, поэтому я не получил вопрос, потому что это не та же сумма. – Bob

0
Scanner input = new Scanner(System.in); 
    System.out.println("Enter n= "); 
    int n = input.nextInt(); 
    int sum=0; 
    boolean positive=false; 

    for(int i=1;i<=n;i+=2){ 
     positive=!positive; 
     sum = positive? sum+i : sum-i; 
    } 
    System.out.println(sum); 
} 
+0

Я бы проголосовал за 'int sign = -1' и' sum = sum + sign * i' или 'sum = negative? sum + i: sum-i', вам не нужно проверять boolean на 'true'. –

+0

Если вы когда-нибудь обнаруживаете, что пишете 'positive == true', то есть тестируете' boolean' против 'true', тогда вы поступили не так, как только вдоль линии. –

+0

Это правда. Я изменил это. – Levan

0

Использование для петли, не по модулю arithmitic:

int sum = 0 
for (int i = 1; math.abs(i) <= n; i = -math.signum(i)*(math.abs(i)+2)) { 
     sum += i; 
    } 
system.out.println(sum) 
Смежные вопросы