Dodawanie kolejnych liczb z przeciwnymi znakami

0

Cześć, mam bardzo proste zadanie, którego nie mogę napisać. Mam za zadanie napisać program, który będzie dodawał kolejne liczby całkowite ze zmiennymi znakami. Czyli coś takiego: 1+(-2)+3... aż do 100. Mógłby mi ktoś z tym pomóc? Kompletnie nie wiem jak się za to zabrać. Kiedyś pisałem coś w c++ a teraz uczę się w Javie. Pozdrawiam

0

Zrób sobie tak:
Zadeklaruj zmienną suma, przechowującą sumę. Na początek ustaw na 0. Dodatkowo dodaj zmienną (np nazwij ją znak) i ustaw ją na 1.
Zrób pętlę for od i do n. W ciele pętli, dodawaj do sumy znak*i. Potem mnóż znak * (-1).

0

Ale czy nie będę miał wtedy tylko dodawania lub odejmowania liczby 1? Wynik wychodzi mi 0.

0

jak nieparzysta to minus a jak parzysta to plus albo odwrotnie

0
for(int i=1; i<=n; i++){
suma+=i*znak; 
znak*=(-1);
}
0

Tak, ale w momencie jak dodam znak do sumy to albo doda jeden albo odejmie jeden. Napisałem tak: Zadeklarowałem sumę i znak zgodnie z tym co napisałeś, zrobiłem pętle od 0 do 99 i w niej dodałem sumę do znaku, znak pomnożyłem *(-1). Potem zrobiłem pętle if i==99 to wypisuje mi sumę. Na ekranie pojawia mi się 0. Jak sobie zrobiłem to na kalkulatorze do 10 to mam wynik -5

0

Nie dodajesz znaku do sumy. Dodajesz i * znak.

0

Dobra, ogarniam już. Zrobiłem błąd w tym, że cały czas miałem nową sumę, a nie dodawałem do niej. Do tego dodawałem sumę a nie i. Dzięki wielkie za pomoc

0
class Main {

    public static void main(String[] args) {
        
        
        int liczba = 0;
		    for(int i=0;i<=100;i++)
		    {
			    liczba += i%2 == 0 ? i : -i;
		    }
		System.out.println(liczba);
    }
}


0

Trzeba zrobić normalne sumowanie w pętli, tylko sumę mnożyć przez (-1)^(-1 + i).

0

Po co tutaj jakikolwiek program? Suma każdych dwóch kolejnych to -1, zatem wynik to -50.

0
System.out.println(-1 * n / 2 );
0
bogdans napisał(a):

Po co tutaj jakikolwiek program? Suma każdych dwóch kolejnych to -1, zatem wynik to -50.

Już się tak nie mądrkuj, panie ekspercie. Czasem chodzi o to, żeby nauczyć się rozwiązać dany problem programistycznie, a nie by rewolucjonizować życie.

0
ytrewq napisał(a):
bogdans napisał(a):

Po co tutaj jakikolwiek program? Suma każdych dwóch kolejnych to -1, zatem wynik to -50.

Już się tak nie mądrkuj, panie ekspercie. Czasem chodzi o to, żeby nauczyć się rozwiązać dany problem programistycznie, a nie by rewolucjonizować życie.

Ale to jest bardzo trafne spostrzeżenie, jeśli da się coś uprościć to upraszczasz i tyle. A jeśli chcesz rozwiązywać problemy, to zawsze możesz dobrać sobie inny problem.

Tak czy inaczej:

AtomicInteger ai = new AtomicInteger(1);
IntSupplier multipler = () -> ai.getAndSet(ai.get() == 1? -1:1); 

long sum = IntRange.range(1, 101).map(i -> i*multipler.getAsInt()).sum();
System.out.println(sum);

1 użytkowników online, w tym zalogowanych: 0, gości: 1