1. 

/**
* FWP, Ausgewählte Probleme aus dem ACM Programming Contest, WS09
* Problem: 557 - Burger
* Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=115&page=show_problem&problem=498
*
* @author Barny Porcio
* @version 1.0, 12/20/2009
*
* Status : Accepted
* Runtime: 1.056
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Burger {

static double log_of_2;
static double[] log2_fak = new double[99999];
static void innitialarray(){
log_of_2 = Math.log(2);
for (int i = 1;i<log2_fak.length;++i){
log2_fak[i]= log2_fak[i-1]+Math.log(i)/log_of_2;
}
}
static public double berechnung(int n){
//log dualis der anzahl der Ereignisse, die mit 2 verschiedenen Burgern enden
double log2_of_n_over_k = log2_fak[n-2]-log2_fak[(n-2)/2]-log2_fak[(n-2)/2];
/*die gegenwahrscheinlichkeit des gesuchten ereignisses ausrechnen,
* die wahrscheinlichkeit für jeden Ast ist 0.5^(n-1), davon kann man den log dualis
* abziehen, da es eigentlich damit multipliziert werden müsste
* und 2 das inverse von 0.5 ist --> 0.5^(-log2_of_n_over_k).
*/
return 1-(2* Math.pow(0.5, (n-1)-log2_of_n_over_k));
}
public static void main(String[] args)throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
innitialarray();
for (int count = Integer.parseInt(reader.readLine()); count >0;--count){
System.out.println(new BigDecimal(berechnung(Integer.parseInt(reader.readLine()))).setScale(4, RoundingMode.HALF_UP));
}
}
}

2.

/**
* ACM Training, SS09
* ACM Problem #557 Burger
* Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=7&page=show_problem&problem=498

* @author Doina Logofatu
* @version 1.0, 12/23/2009
*
* Method: Math, Probability
* Status : Accepted
* Runtime: 0.052
*/

#include <iostream>
#include <vector>

const int NMAX = 50000;
using namespace std;

int main(){
long int n, i, k;
vector<long double> T;
T.push_back(1);
for(i=1; i<=NMAX; i++){
T.push_back((long double)((2*i-1.0)/(2*i)*T[i-1]));
}
cin>>n;
for(i=0; i<n; i++){
cin >> k;
cout.precision(4);
cout.flags(ios::fixed);
cout << 1-T[k/2-1] << endl;
}
return 0;
}