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

question-closed Upiększenie programy wyznaczającego liczby, których suma daje liczbę n wprowadzoną przez użytkownika

VPS Starter Arubacloud
0 głosów
502 wizyt
pytanie zadane 24 listopada 2022 w C i C++ przez IK1618 Nowicjusz (120 p.)
zamknięte 26 listopada 2022 przez IK1618

Dzień dobry,

Napisałem program, który wpisane przez użytkownika n, ma rozłożyć na liczby, których suma kwadratów wynosi n.
Chciałbym jednak, aby program wypisywał przypadki tj: przypadek 1, przypadek 2, ponieważ liczba np 6817, ma dwie możliwości takiego rozkładu: na 81 i 16 oraz na 79 i 24.
Chciałbym również, przede wszystkim, aby program wyświetlił - "Podanej liczy nie da się rozłożyć", jeżeli tak jest.
Poniżej załączam kod, który napisałem.

Pozdrawiam i z góry dziękuję za pomoc :).

using namespace std;

int main()
{
    int n, x, i;
    cout << "Podaj liczbe n: " << endl;
    cin >>n;


    for(i=1; i<=(n/2); i++)
    {
    x=n-i;
            if ((sqrt(x) - int(sqrt(x))==0)&&(sqrt(i) - int(sqrt(i))==0))
            {
            cout << "pierwsza liczba: " << sqrt(x) << endl;
            cout << "druga liczba: " << sqrt(i) << endl;
            }

    }

    return 0;
}

 

komentarz zamknięcia: sam znalazłem odpowiedź
2
komentarz 24 listopada 2022 przez SzkolnyAdmin Szeryf (86,280 p.)
Napisałeś " program, który wpisane przez użytkownika n, ma rozłożyć na liczby, których suma wynosi n. "

oraz " liczba np 6817, ma dwie możliwości takiego rozkładu: na 81 i 16 oraz na 79 i 24. "

Ale sumy 81+16 = 97 i 79+24=103 nie mają nic wspólnego z liczbą 6817.

Doprecyzuj problem.
1
komentarz 24 listopada 2022 przez Great Stary wyjadacz (12,300 p.)
Domyślam się, że chodzi o sumę kwadratów: 81 ^ 2 + 16 ^ 2 = 6817
komentarz 24 listopada 2022 przez IK1618 Nowicjusz (120 p.)

@SzkolnyAdmin, Chodziło o sumę kwadratów, przepraszam za pomyłkę. 

komentarz 24 listopada 2022 przez Great Stary wyjadacz (12,300 p.)

@IK1618 dodaj nową zmienną. Inkrementuj ją za każdym razem, gdy znajdziesz parę liczb, których suma kwadratów jest równa n. Teraz nie powinieneś mieć problemu ze sprawdzeniem, czy liczby nie da się rozłożyć.

komentarz 24 listopada 2022 przez IK1618 Nowicjusz (120 p.)
Próbowałem coś napisać, ale nie wiem w którym miejscu wstawić pętle, aby to działało prawidłowo.

1 odpowiedź

+1 głos
odpowiedź 25 listopada 2022 przez TOWaD Mądrala (5,700 p.)

To mi wyrzuciło liczby takie liczby z automatu ale to nie jest żaden algorytm.

#include <iostream>
#include <cmath>

using namespace std;
 
int main()
{
    int n=6817;
    cout << "Podaj liczbe n: " << endl;
   // cin >>n;
    //6817
    for(int i=1,j=sqrt(n); i<=j;)
    {
        int sqn=j*j+i*i;
            if (sqn>n) j--;
            else if (sqn<n)i++;
            else{
            cout << "pierwsza liczba: " << i << endl;
            cout << "druga liczba: " << j << endl;
            i++;
            }
    }
    return 0;
}

 

komentarz 26 listopada 2022 przez TOWaD Mądrala (5,700 p.)

Można jeszcze tak:

#include <iostream>
#include <locale>
#include <clocale>
#include <cwchar>
#include <cmath>

class index {
  char narrow_str[20] = {};
  wchar_t warr[10];
  public:
    index(const char * znakUTF8) {
      for (int i = 0; i < 18 && i < sizeof(znakUTF8); i++) narrow_str[i] = znakUTF8[i];
      std::setlocale(LC_ALL, "en_US.UTF-8");
      std::swprintf(warr, sizeof warr / sizeof * warr, L"%s", narrow_str);
      std::wcout.imbue(std::locale("C.UTF-8"));
    }
  wchar_t * get() {
    return warr;
  }

};
int main() {

  index ix("\u00B2");
  std::wcout << L"Podaj fajną liczbę : ";
  int n = 6817;
  std::wcin >> n;
  for (int i = 1, j = sqrt(n); i <= j;) {
    int sqn = j * j + i * i;
    if (sqn > n) j--;
    else if (sqn < n) i++;
    else {
      std::wcout << index("\u2603").get() << " " << n << "=" << i << ix.get() << "+" << j << ix.get() << '\n' << std::flush;
      i++;
    }
  }

  return 0;
}
//https://en.cppreference.com/w/cpp/locale/setlocale
//https://en.cppreference.com/w/cpp/io/c/fwprintf

Podaj fajną liczbę : 6817
☃ 6817=16²+81²
☃ 6817=24²+79²

ale nie wiem czy to poprawne i bezpieczne;

Podobne pytania

0 głosów
0 odpowiedzi 167 wizyt
pytanie zadane 10 listopada 2020 w Algorytmy przez amtrax Dyskutant (9,630 p.)
0 głosów
2 odpowiedzi 799 wizyt
pytanie zadane 20 marca 2019 w C i C++ przez abcd Początkujący (290 p.)
+1 głos
1 odpowiedź 380 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...