Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[c++] Pętla for - proste zadanie

#1
[c++] Pętla for - proste zadanie
Witam, mam pewien problem. Treść zadania to : "wczyta liczbę całkowitą N, obliczy i wypisze na ekran największą liczbę naturalną n spełniającą warunek 1 + 2 + 3 + …. + n < N;"

zrobiłem taką pętle :
Kod:
int wynik = 0;
    int n = 10;
    for( int i= 1; i <= n; i++ ){
        
        if( wynik < n )
            System.out.print(i);
        
        wynik += i;
        
        }
Wynik to oczywiście :
Kod:
1234

Wszystko fajnie, tylko chciałbym żeby wyświetlało tylko "n" a nie tak jak w tym przypadku : "1234"

Bierze się to stąd, że liczby 1 2 i 3 też spełniają warunek więc zostaje on wypisany. I nie mogę wykombinować żeby wyświetliło w tym przypadku tylko "4". Pomoże ktoś to zrobić używając tylko pętli i ifa ?

Dobra już ogarnąłem, po prostu tyle zadań z pętli for robiłem pod rząd, że do głowy mi nie przyszło że tutaj lepiej się nada pętla while. Ale jakby miał ktoś pomysł jak to zrobić za pomocą petli for to z chęcią podpatrzę Wesoły
 System operacyjny: windows_seven Przeglądarka: chrome
#2
RE: [c++] Pętla for - proste zadanie
Kod:
int N = 0;
for(int i = 0; i <= n; i++){

N = i-1;
if(i == n);
System.out.println("N: " + N);

}
 System operacyjny: windows_98_nt Przeglądarka: chrome
#3
RE: [c++] Pętla for - proste zadanie
(28.02.2014, 11:31)Rincewind napisał(a):
Kod:
int N = 0;
for(int i = 0; i <= n; i++){

N = i-1;
if(i == n);
System.out.println("N: " + N);

}

Nie działa tak jak powinno, chyba źle przeczytałeś zadanie. Szukamy "n" a nie "N", a poza tym Twój kod wywala parę wartości, błędnych zresztą. A ma zwrócić jedną :D

Tutaj mój działający kod dla porównania :
Kod:
        int podanaliczba = 12;  //przykladowa liczba ktora wpisuje uzytkownik
        int wynik = 0;          
        int startowa = 1;
        while(wynik<podanaliczba){
            wynik+=startowa;
            startowa++;
            
            }
            System.out.print(startowa-2);

Bo : 1 + 2 + 3 + 4 = 10 < podanaliczba - czyli sie zgadza.
w przypadku 1+2+3+4+5 = 15 > podanaliczba - czyli sie NIE zgadza.

Chyba, że ja czegoś nie zrozumiałem w Twoim kodzie i jest on poprawny, to proszę o wybaczenie :D
A ten napis w stopce u Ciebie mnie rozwalił xD
 System operacyjny: windows_seven Przeglądarka: chrome
#4
RE: [c++] Pętla for - proste zadanie
Fakt, zrozumiałem że chcesz podać ostatnią liczbę całkowitą a nie sumę liczb która utworzy podaną. Mój babol. Wesoły

A więc chodzi Ci o to by podając 10, komputer obliczył 1 + 2 + 3 + 4 i w tym momencie przerwał działanie oraz wyświetlił liczbę 4 jako ostatnią spełniającą zależność? To banał. Wesoły I w zasadzie sam to napisałeś:

Kod:
int n = 1;
        int N = 12;
        for(int i = 0;i<=N;){
            i += n;
            n++;
        }
        System.out.println(n - 2);

Działa dokładnie tak samo jak Twój kod.
 System operacyjny: windows_98_nt Przeglądarka: chrome
#5
RE: [c++] Pętla for - proste zadanie
Ja bym to policzył zupełnie inaczej. Rozumiem, że komputery są szybkie, a zadanie trywialne, ale to przecież jest zwykła nierówność kwadratowa. Na podstawie zadanych warunków łatwo policzyć, że szukana liczba to: n = floor(-0.5 + sqrt(0.25+2*N)).
 System operacyjny: windows_seven Przeglądarka: firefox
#6
RE: [c++] Pętla for - proste zadanie
(28.02.2014, 13:46)koneton napisał(a): Ja bym to policzył zupełnie inaczej. Rozumiem, że komputery są szybkie, a zadanie trywialne, ale to przecież jest zwykła nierówność kwadratowa. Na podstawie zadanych warunków łatwo policzyć, że szukana liczba to: n = floor(-0.5 + sqrt(0.25+2*N)).

No wiesz, ja bym nigdy na to nie wpadł bo z matmą jestem zacofany na tyle, że przerabiam od nowa cały materiał od ..... szkoły podstawowej Język
 System operacyjny: windows_seven Przeglądarka: chrome
#7
RE: [c++] Pętla for - proste zadanie
Podstawy matematyki się przydają. Czasami lepiej pomyśleć chwilę, niż od razu pisać kod.
 System operacyjny: windows_seven Przeglądarka: firefox
#8
RE: [c++] Pętla for - proste zadanie
Zgadzam się z Tobą w zupełności. Swoją drogą nie mam pojęcia jak to skojarzyłeś, ja nadal nie widzę powiązań. A to dlatego, że w szkołach właśnie się uczniów "programuję". Wylicz to, tamto, delta a nikt nie wie w zasadzie dlaczego to robi, ważne że wynik się zgadza. Twój algorytm przyspieszył tą operację pewnie parokrotnie, przy ogromnych liczbach miałoby to ogromne znaczenie Wesoły Mógłbyś napisać w jaki sposób to skojarzyłeś z nierównością kwadratową i skąd wiedziałeś jakie liczby podstawić ? Funkcje sqrt i floor wygooglowałem.
 System operacyjny: windows_seven Przeglądarka: chrome
#9
RE: [c++] Pętla for - proste zadanie
Zaczynamy od początku, czyli od sumy ciągu arytmetycznego 1+2+..+n. Suma ta jest łatwa do wyliczenia i wynosi n*(n+1)/2 (patrz http://pl.wikipedia.org/wiki/Ci%C4%85g_arytmetyczny). Otrzymujemy zatem warunek
Kod:
n*(n+1)/2<=N
, czyli 0.5*n^2 + 0.5*n -N <=0. W tym momencie masz już szukaną nierówność kwadratową. Stąd łatwo widać, że
Kod:
Delta = 0.5^2-4*0.5*(-N)=0.25+2*N
. Współczynnik a jest dodatni, więc rozwiązania mniejsze od zera są między miejscami zerowymi (x1, x2). Szukana liczba, to największa liczba całkowita mniejsza od x2 (zakładając, że x1=-b-sqrt(delta), a x2=-b+sqrt(delta)).
 System operacyjny: windows_seven Przeglądarka: firefox
#10
RE: [c++] Pętla for - proste zadanie
(28.02.2014, 15:01)koneton napisał(a): Zaczynamy od początku, czyli od sumy ciągu arytmetycznego 1+2+..+n. Suma ta jest łatwa do wyliczenia i wynosi n*(n+1)/2 (patrz http://pl.wikipedia.org/wiki/Ci%C4%85g_arytmetyczny). Otrzymujemy zatem warunek
Kod:
n*(n+1)/2<=N
, czyli 0.5*n^2 + 0.5*n -N <=0. W tym momencie masz już szukaną nierówność kwadratową. Stąd łatwo widać, że
Kod:
Delta = 0.5^2-4*0.5*(-N)=0.25+2*N
. Współczynnik a jest dodatni, więc rozwiązania mniejsze od zera są między miejscami zerowymi (x1, x2). Szukana liczba, to największa liczba całkowita mniejsza od x2 (zakładając, że x1=-b-sqrt(delta), a x2=-b+sqrt(delta)).

Godzinę mi to zajęło ale zrozumiałem wszystko, przy okazji dowiedziałem się jeszcze paru rzeczy. Najważniejsze, że ROZUMIEM co się dzieje a nie, że WIEM jak wyliczyć, dzięki temu następnym razem też to zauważę i będę w stanie to rozwiązać (mam nadzieję). Dzięki wielkie, bardzo mi pomogłeś. The force will be with you. Always Wesoły
 System operacyjny: windows_seven Przeglądarka: chrome
Programy: Polecane / Nowe / Inne




Podobne wątki ([c++] Pętla for - proste zadanie)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Ściana Zadanie cmd.... Yanke$ 2 9302 16.03.2018, 17:20
Ostatni post: FireBytes
  Inkrementacja a pętla while Cixi 2 6094 22.12.2016, 21:47
Ostatni post: Cixi
  Zadanie do wykonania w Ruby`m envy12 0 5713 05.12.2015, 16:04
Ostatni post: envy12

Skocz do:


Wybrane wątki ([c++] Pętla for - proste zadanie)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Question Wyznaczanie maksimum spośród 5 liczb - schemat blokowy mistrz18 5 8110 05.10.2017 19:49
Ostatni post: broda99
  Batch - odczytywanie temperatury karty graficznej i zapisywanie jej do zmiennej ~Anonim 4 8130 03.09.2017 21:41
Ostatni post: ~Anonim
  Kodowanie znaków w .bat kkkkk2105 4 9609 25.08.2017 14:38
Ostatni post: kkkkk2105
  Konwertowanie słów na liczby Java Blendow 5 7919 19.08.2017 21:17
Ostatni post: Szachista
  Kończenie i zamykanie skryptu vbs ottps 1 7366 16.08.2017 23:55
Ostatni post: broda99
  Podwojne menu wyboru w batch files kulis88 3 7722 12.08.2017 23:41
Ostatni post: broda99
  Walidacja tekstu w CSV,XLS w PHP Profedbond 9 8255 11.08.2017 09:10
Ostatni post: insanebear
  [VBS] String TheJohan8 5 7870 08.08.2017 00:11
Ostatni post: Ajgor
  Jaki kod pod buttony i progressbar w visualbasicu2010 Express? aktywny27 2 7186 06.08.2017 14:41
Ostatni post: ~Anonim
  [VB.Net] webbrowser a kody kreskowe DonCorleone 0 6753 03.08.2017 20:13
Ostatni post: DonCorleone
Ściana batch file ustawianie jednej wartosci zmiennej do kilku plikow kulis88 6 2024 03.08.2017 19:12
Ostatni post: kulis88
  [VBS] loop & if TheJohan8 0 6663 01.08.2017 18:40
Ostatni post: TheJohan8
  Co oznaczają te linijki ? maciex44 2 9604 28.07.2017 21:39
Ostatni post: Ajgor
  Tworzenie programu do instalacji maciex44 1 9966 28.07.2017 18:50
Ostatni post: TheJohan8
Exclamation [VBS] Skrypt błyskawicznie się kończy TheJohan8 7 7379 28.07.2017 16:29
Ostatni post: TheJohan8