• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szukanie najbliższej liczby będącej kwadratem liczby naturalnej

Object Storage Arubacloud
+1 głos
895 wizyt
pytanie zadane 8 sierpnia 2016 w C i C++ przez niezalogowany

Program powinien wypisać pooddzielane spacjami kolejne liczby naturalne. Pierwszą z nich powinna być liczba image, a ostatnią najbliższa liczba będąca kwadratem liczby naturalnej. Np:

Dla danych wejściowych:

42

poprawną odpowiedzią jest:

42 43 44 45 46 47 48 49

Mój sposób: program sprawdza czy podana liczba jest równa iloczynowi dwóch takich samych liczb, jeżeli podana liczba jest za duża pętla iteruje dwie liczby z iloczynu, a jeżeli iloczyn jest za duży program wyświetla podaną liczbę i jej iteracje dopóki, dopóty znajdzie liczbę równą iloczynowi. Dotychczasowy kod:

#include <iostream>
#include <cstdlib>

using namespace std;

int a;
int b = 2;

int main()
{
	cin >> a;

	if (a == (b * b))
	{
		cout << a;
		if (a < (b * b))
		{
			cout << a;
			a++;
		}
		else if (a > (b * b))
			b++;
	}
	
	system("PAUSE");
}

 

komentarz 10 sierpnia 2016 przez Informatyk# Obywatel (1,060 p.)
Mi się wydaje, że skoro ma się wykonać do momentu następnej potęgi to musisz użyć pętli. If to nie pętla, a to jest tylko warunek. Użyj pętli while, do while lub for. Ja postaram się za jakiś czas opublikować rozwiązanie ;)
komentarz 10 sierpnia 2016 przez Informatyk# Obywatel (1,060 p.)
#include <iostream>
#include <cstdlib>

using namespace std;

int a;
int b = 1;

int main()
{
    cin >> a;
int i = a;
    do
    {


        if (i < (b * b))
            i++;
        else if (i > (b * b))
            b++;
    }
    while (!(i==b*b));


    cout<<endl<<endl<<"Najblizsza potega to: " <<b*b<<endl<<endl;

    cout<<"liczby pomiedzy: "<<endl;
    int potega = b*b;
    for ( i=a; i<potega; i++)
        cout<<i<<endl;



    system("PAUSE");
}

 

3 odpowiedzi

+1 głos
odpowiedź 10 sierpnia 2016 przez Informatyk# Obywatel (1,060 p.)
wybrane 13 sierpnia 2016
 
Najlepsza
#include <iostream>
#include <cstdlib>

using namespace std;

int a;
int b = 1;

int main()
{
    cin >> a;
int i = a;
    do
    {


        if (i < (b * b))
            i++;
        else if (i > (b * b))
            b++;
    }
    while (!(i==b*b));


    cout<<endl<<endl<<"Najblizsza potega to: " <<b*b<<endl<<endl;

    cout<<"liczby pomiedzy: "<<endl;
    int potega = b*b;
    for ( i=a; i<potega; i++)
        cout<<i<<endl;



    system("PAUSE");
}

 

komentarz 10 sierpnia 2016 przez Informatyk# Obywatel (1,060 p.)
W razie jakichś pytań zapraszam na priv.
+1 głos
odpowiedź 8 sierpnia 2016 przez niezalogowany
Zaraz zaraz, najpierw sprawdzasz czy jest równe a potem czy jest większe mniejsze
komentarz 8 sierpnia 2016 przez niezalogowany
if (a == (b * b))

    {

        cout << a;

         

    }

    else if (a < (b * b))

    {

        cout << a;

        a++;

    }

    else if (a > (b * b))

        b++;

a jaką liczbę jako A podajesz
komentarz 8 sierpnia 2016 przez niezalogowany
powiedzmy, że b = 1 na wejście podaje 5, program znajduje najbliższą potęgę czyli 9, iteruje i b i podaną liczbę (przy czym wyświetla jej iteracje) aż dojdzie do 9
komentarz 8 sierpnia 2016 przez niezalogowany

Sprawdziłem dla tej piątki wyniki i okazuje się, że pętla else if (a > (b * b)) wykonuje się tylko raz. Tylko nie wiem dlaczego. Próbowałem też tak:

#include <iostream>
#include <cstdlib>

using namespace std;

int a;
int b = 1;

int main()
{
	cin >> a;

	if (a == (b * b))
	{
		cout << a;
		while (a < (b * b))
		{
			cout << a;
			a++;
		}
		while (a > (b * b))
			b++;
	}

	system("PAUSE");
}

 

komentarz 8 sierpnia 2016 przez niezalogowany
ale Ty najpierw sprawdzasz czy jest równe a potem większe lub mniejsze pomyśl trochę
1
komentarz 10 sierpnia 2016 przez niezalogowany

pomyśl trochę

Dziękuję za pomoc, ta rada bardzo mi się przydała.

+1 głos
odpowiedź 10 sierpnia 2016 przez MetRiko Nałogowiec (37,110 p.)

Najłatwiejsze rozwiązanie jakie przyszło mi do głowy:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int x;
    cin>>x;
    
    while(true)
    {
        cout<<x<<" ";
        if(sqrt(x)-trunc(sqrt(x))) x++; //funkcja trunc zwraca część całkowitą liczby.. przykładowo trunc(4.267) jest równe 4
        else break;
    }
}

 

Podobne pytania

0 głosów
2 odpowiedzi 738 wizyt
pytanie zadane 17 sierpnia 2016 w C i C++ przez diov Nowicjusz (150 p.)
0 głosów
1 odpowiedź 271 wizyt
0 głosów
2 odpowiedzi 396 wizyt

92,555 zapytań

141,402 odpowiedzi

319,544 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...