Problem - Matura Informatyka Rozszerzona

0

Witam! Mam problem z rozwiązaniem tych zadań maturalnych, niby mam jakiś zarys całego programu, ale mimo wszelkich poprawek, działa on nie tak jak powinien. Byłabym wdzięczna za wszelką pomoc :D

Zadanie 4. Punkty XY
Plik punkty.txt zawiera 1000 wierszy, w których zapisane są po dwie liczby całkowite
z przedziału [0, 10000], oddzielone pojedynczym odstępem. Para liczb w każdym wierszu
odpowiada współrzędnym (x, y) jednego punktu w układzie kartezjańskim. W danych punkty
się nie powtarzają.
Napisz program(y), który(e) da(dzą) odpowiedzi do poniższych zadań. Odpowiedzi zapisz
w pliku wyniki4.txt, a każdą odpowiedź poprzedź numerem oznaczającym odpowiednie
zadanie.

Zadanie 4.1. (0–2)
Ile jest punktów, których obie współrzędne są liczbami pierwszymi?

Zadanie 4.2. (0–3)
Dwie liczby są cyfropodobne, jeżeli do zapisania każdej z nich wykorzystujemy takie same
cyfry dziesiętne.
Podaj ile jest punktów, których współrzędne są cyfropodobne.
Przykład:
Liczby będące współrzędnymi punktu (123, 1321) są cyfropodobne, ponieważ
obie zostały zapisane za pomocą cyfr 1, 2, 3.
Przykład:
Liczby będące współrzędnymi punktu (505, 55) nie są cyfropodobne, ponieważ
do zapisania pierwszej liczby wykorzystano cyfry 0 i 5, a do zapisania drugiej z nich
wykorzystano tylko cyfrę 5.

Zadanie 4.3. (0–3)
Znajdź najbardziej oddalone od siebie punkty. Podaj współrzędne znalezionych punktów oraz
odległość między nimi zaokrągloną do liczby całkowitej.
Jest tylko jedna para takich punktów.
Uwaga: odległość punktów A i B na płaszczyźnie określa wzór:
| AB | ൌ ✓ሺxB െ xAሻ2 ൅ ሺyB െ yAሻ2

gdzie xA, yA są współrzędnymi punktu A, natomiast xB, yB są współrzędnymi punktu B.

0

Proszę pokaż kod, który już napisałeś.

3

screenshot-20210516135638.png

Wygląda jak matematyka oczami humanisty :D

0

Zadanie 4.1. - sito Eratostenesa
Zadanie 4.2.

int digits_hash(int value)
{
    int ret=0;
    for(int next=1;next;ret|=(1<<(value-(next=value/10)*10))) value=next;
    return ret;
}
cout<<(digits_hash(123)==digits_hash(1321))<<endl;
cout<<(digits_hash(505)==digits_hash(55))<<endl;

Zadanie 4.3.
Znaleźć parę z maksymalnym:

int distanceSqr(double ax,double ay,double bx,double by) {  ax-=bx; ay-=by; return ax*ax+ay*ay; }
int distance(double bestDistanceSqr) { return sqrt(bestDistanceSqr); } // do wyświetlenia

No chyba że ten wzór humanistyczny (dzięki @0xmarcin za wyjaśnienie), to opis zupełnie innego algorytmu, na przykład odległość Manhattańska, wtedy:

int distance(double ax,double ay,double bx,double by) {  return abs(ax-bx)+abs(ay-by); }

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