DAM NAJ JAK BĘDZIE DO SOBOTY 29.04 Na podwórku Marcina w każdym punkcie o współrzędnych całkowitych znajduje się diament. Postanowił on wykopać wszystkie diamenty znajdujące się w odległości nie większej niż r od punktu (0, 0). Ile diamentów wykopie Marcin? Wejście W pierwszym wierszu standardowego wejścia znajduje się jedna liczba całkowita r (1 6 r 6 106 ). Wyjście W pierwszym wierszu standardowego wyjścia należy wypisać jedną liczbę całkowitą – liczbę diamentów, jaką wykopie Marcin. Przykłady Wejście: 1 wyjście: 5 wejście: 3 wyjście 29 wejście 7 wyjście 149
Intelektalista
czy dałbyś rade zrobić coś aby Twój program działał szybciej
czarodziej67
zawsze da się coś poprawić, nie jestem biegły z cpp więc raczej nie za dużo tu zdziałam, na pewno można ten pierwiastek wyrzucić z warunku i wykorzystać symetrię układu, to powinno przyspieszyć działanie #include using namespace std;
int main() { int r, diamenty = -1; cin >> r; for (int x = 0; x <= r; x++) { for (int y = 0; y <= r; y++) { if (x*x + y*y <= r*r) { if (x == 0 || y == 0) { diamenty += 2; } else { diamenty += 4; } } } } cout << diamenty << endl; return 0; }
czarodziej67
w komentarzu nie sformatowało się to za ładnie ale myślę że widzisz zmiany, zliczanie zaczyna się od -1 bo ten algorytm policzy diamenty w punkcie (0,0) *2, można to zastąpić np. dodatkowym warunkiem if (x == 0 && y == 0) { count += 1; }
Odpowiedź:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int r, diamenty = 0;
cin >> r;
for (int i = -r; i <= r; i++)
{
for (int j = -r; j <= r; j++)
{
if (sqrt(i*i + j*j) <= r)
{
diamenty++;
}
}
}
cout << diamenty << endl;
return 0;
}
Wszystko wydaje się być ok, w razie czego pisz :)
#include
using namespace std;
int main() {
int r, diamenty = -1;
cin >> r;
for (int x = 0; x <= r; x++) {
for (int y = 0; y <= r; y++) {
if (x*x + y*y <= r*r) {
if (x == 0 || y == 0) {
diamenty += 2;
} else {
diamenty += 4;
}
}
}
}
cout << diamenty << endl;
return 0;
}