VIII Mistrzostwa WWSI w Programowaniu

Przykładowe zadanie

Specjalnie dla osób, które pierwszy raz biorą udział w zawodach programistycznych poniżej zamieszczamy przykładowe zadanie z Wiosennych Zawodów Programistycznych wraz z rozwiązaniami. Zachęcamy również do zapoznania się z artykułem naszego autorstwa zatytułowanym "Wprowadzenie w rozwiązywanie konkursowych zadań programistycznych". Dostępny jest on także w Zeszytach Naukowych nr 3 wydanych przez naszą uczelnie.

Okręgi

Od zakończenia ostatnich Mistrzostw WWSI w Programowaniu czuliśmy głęboką i nieodpartą potrzebę napisania zadania związanego z geometrią. Zadania tak trudnego, że nawet zagadka Alberta Einsteina (którą według autora jest w stanie rozwiązać zaledwie 2% ludzkości) może się przy nim schować. Zadania tak skomplikowanego pod względem programistycznym, że nawet Bill Gates, Linus Torvalds i Richard Matthew Stallman razem wzięci rozwiązywaliby je miesiącami. Zadania, które będzie Twoim najgorszym koszmarem. Zadania, za którego rozwiązanie oddalibyście wszystko...

No dobra, wystarczy ;-) Ważne jest to, że napisaliśmy je! Niestety 10 minut później Iwan, pies Tomka, zjadł nasze najtrudniejsze zadanie na świecie. To był znak! Zrozumieliśmy wtedy, że naszym przeznaczeniem jest napisanie najłatwiejszego zadania na świecie. Oto ono: oblicz obwód okręgu opisanego oraz okręgu wpisanego w kwadrat o boku n centymetrów.

W językach programowania nie posiadających zdefiniowanej stałej pi jako jej wartość należy przyjąć wynik funkcji cyklometrycznej arcus cosinus dla parametru -1.

Przykład dla języka C++: const double PI = acos(-1.0);

Wejście

W pierwszej linii wejścia znajduje się dokładnie jedna liczba naturalna t (1 ≤ t ≤ 1000) określająca ilość zestawów danych. W kolejnych t liniach znajdują się zestawy danych.

Każdy zestaw danych składa się z dokładnie jednej liczby rzeczywistej n (1 ≤ n ≤ 109) określającej długość boku kwadratu.

Wyjście

Dla każdego zestawu danych wypisz w osobnej linii dwie liczby rzeczywiste o oraz w określające odpowiednio obwód okręgu opisanego na danym kwadracie oraz obwód okręgu wpisanego w dany kwadrat. Każdy z obwodów powinien zostać wypisany z dokładnością do 5 miejsc po przecinku.

Przykład

Wejście:1

2
2.0
1000000.0

Wyjście:

8.88577 6.28319
4442882.93816 3141592.65359

  1. Uwaga! Osoby piszące w języku C# powinny podczas testowania swoich rozwiązań zwrócić uwagę na ustawienia regionalne systemu. Jeżeli używamy systemu z polskimi ustawieniami regionalnymi to podczas testowania należy wpisywać przecinek jako separator części ułamkowej od części całkowitej, a nie kropkę tak jak jest to pokazane w danych przykładowych.

Przykładowe rozwiązanie w języku C


#include <math.h>
#include <stdio.h>
int main() {
	const double PI = acos(-1.0);
	double n, o, w;
	int t;
	scanf("%d", &t);
	while (t--) {
		scanf("%lf", &n);
		o = PI * sqrt(2 * n * n);
		w = PI * n;
		printf("%.5lf %.5lf\n", o, w);
	}
	return 0;
}

Przykładowe rozwiązanie w języku C++


#include <cmath>
#include <cstdio>
int main() {
	const double PI = acos(-1.0);
	int t;
	scanf("%d", &t);
	while (t--) {
		double n;
		scanf("%lf", &n);
		double o = PI * sqrt(2 * n * n);
		double w = PI * n;
		printf("%.5lf %.5lf\n", o, w);
	}
	return 0;
}

Przykładowe rozwiązanie w języku C#


using System;
class Okregi
{
    static void Main()
    {
        int t = int.Parse(Console.ReadLine());
        while (t-- > 0)
        {
            double n = double.Parse(Console.ReadLine()) / 2;
            double w = 2 * Math.PI * n;
            double o = 2 * Math.PI * Math.Sqrt(2 * n * n);
            Console.WriteLine("{0:F5} {1:F5}", o, w);
        }
    }
}