Go: package main

import (
	"fmt"
	"math"
)

func main() {
	n := scanInt()
	for i := 0; i < n; i++ {
		circleTriangle()
	}
}

func scanInt() int {
	var n int
	fmt.Scanf("%d", &n)
	return n
}

func circleTriangle() {
	var x1, y1, x2, y2, x3, y3 float64
	fmt.Scanf("%f%f%f%f%f%f", &x1, &y1, &x2, &y2, &x3, &y3)
	a := 2 * (x1 - x2)
	b := 2 * (y1 - y2)
	c := 2 * (x1 - x3)
	d := 2 * (y1 - y3)
	e := x1*x1 - x2*x2 + y1*y1 - y2*y2
	f := x1*x1 - x3*x3 + y1*y1 - y3*y3

	px := (d*e - b*f) / (a*d - b*c)
	py := (a*f - c*e) / (a*d - b*c)

	r := math.Sqrt((x1-px)*(x1-px) + (y1-py)*(y1-py))
	fmt.Printf("%.3f %.3f %.3f\n", px, py, r)
}

C++: #include <iostream>
#include <cmath>
 
using namespace std;
typedef struct { double x; double y;} point;
  
point getCircumcenter(point a, point b, point c)
{
    double A1 = 2.0f * ( b.x - a.x );
    double B1 = 2.0f * ( b.y - a.y );
    double C1 = pow(a.x,2)-pow(b.x,2) + pow(a.y,2)-pow(b.y,2);
    double A2 = 2.0f * ( c.x - a.x );
    double B2 = 2.0f * ( c.y - a.y );
    double C2 = pow(a.x,2)-pow(c.x,2) + pow(a.y,2)-pow(c.y,2);
    double X = (B1 * C2 - B2 * C1) / (A1 * B2 - A2 * B1);
    double Y = (C1 * A2 - C2 * A1) / (A1 * B2 - A2 * B1);
    point P;
    P.x=X;
    P.y=Y;
    return P;
}
 
double getTwoPointDictance(point a, point b)
{
    return fabs(sqrt(pow((a.x-b.x),2)+pow((a.y-b.y),2)));
}
double AntiMinusZero(double n)
{
    if(n==0)
    {
        return 0.0f;
    }
    return n;
}
 
int main()
{
    int n;
    cin>>n;
    point a,b,c;
    while(n--)
    {
        cin>>a.x>>a.y>>b.x>>b.y>>c.x>>c.y;
        point ans = getCircumcenter(a,b,c);
        printf("%.3lf %.3lf %.3lfn", AntiMinusZero(ans.x), AntiMinusZero(ans.y), getTwoPointDictance( a, ans));
    }
}

C++: #include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

int main(){
	int n;
	double x1,y1,x2,y2,x3,y3,x1_2,x1_3,y1_2,y1_3,z1_2,z1_3,a,b,c,r;
	while(cin >> n){
		for(int i = 0;i < n;++i){
			cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
			z1_2 = (((x1 * x1) + (y1 * y1)) * -1) - (((x2 * x2) + (y2 * y2)) * -1);
			z1_3 = (((x1 * x1) + (y1 * y1)) * -1) - (((x3 * x3) + (y3 * y3)) * -1);
			x1_2 = x1 - x2;
			x1_3 = x1 - x3;
			y1_2 = y1 - y2;
			y1_3 = y1 - y3;
			a = ((y1_2 * z1_3) - (y1_3 * z1_2)) / ((y1_2 * x1_3) - (y1_3 * x1_2));
			b = ((x1_2 * z1_3) - (x1_3 * z1_2)) / ((x1_2 * y1_3) - (x1_3 * y1_2));
			c = ((x1 * x1) + (y1 * y1) + (a * x1) + (b * y1)) * -1;
			r = sqrt(c * 4 + (a * a) + (b * b));
			printf("%.3f %.3f %.3f\n",a / -2.0,b / -2.0,r);
		}
	}
	return 0;
}

C++: #include <iostream>
#include <vector>
//#include <math.h>
//#include <string>
#include <cmath>
#include <iomanip>

int main();
double round(double dSrc, int iLen);

int main(){
	int cnt = 0;		//データセットの個数
	double x1, y1, x2, y2, x3, y3;
	std::vector<double> p;		//外接円の中心のx座標
	std::vector<double> q;		//外接円の中心のy座標
	std::vector<double> r;		//外接円の半径
	
	std::cin >> cnt;
	for (int i = 0; i < cnt; i++){
		std::cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
		p.push_back(((y1 - y3) * (pow(y1, 2) - pow(y2, 2) + pow(x1, 2) - pow(x2, 2)) - (y1 - y2) * (pow(y1, 2) - pow(y3, 2) + pow(x1, 2) - pow(x3, 2))) / (2 * (y1 - y3) * (x1 - x2) - 2 * (y1 - y2) * (x1 - x3)));
		q.push_back(((x1 - x3) * (pow(x1, 2) - pow(x2, 2) + pow(y1, 2) - pow(y2, 2)) - (x1 - x2) * (pow(x1, 2) - pow(x3, 2) + pow(y1, 2) - pow(y3, 2))) / (2 * (x1 - x3) * (y1 - y2) - 2 * (x1 - x2) * (y1 - y3)));
		r.push_back(sqrt((pow((p[i] - x1), 2) + pow((q[i] - y1), 2))));

		double result_p;
		double result_q;
		double result_r;

		result_p = round(p[i], 3);
		result_q = round(q[i], 3);
		result_r = round(r[i], 3);

		std::cout << std::fixed << std::setprecision(3) << result_p << " " << result_q << " " << result_r << std::endl;
	}
	/*
	for (int i = 0; i < cnt; i++){
		double result_p;
		double result_q;
		double result_r;

		result_p = round(p[i], 3);
		result_q = round(q[i], 3);
		result_r = round(r[i], 3);

		std::cout << std::fixed << std::setprecision(3) << result_p << " " << result_q << " " << result_r << std::endl;
	}
	*/

	//while (1);
	return 0;
}

/**
* 指定桁で四捨五入を行う
* args:数値, 四捨五入する桁数
* return:結果
* 参考:http://oresi.hatenablog.com/entry/2014/06/23/【C%2CC%2B%2B】指定桁数で端数処理%EF%BC%88切り上げ、切り下げ
*/
double round(double dSrc, int iLen)
{
	double	dRet;

	dRet = dSrc * pow(10.0, iLen);
	dRet = (double)(int)(dRet + 0.5);

	return dRet * pow(10.0, -iLen);
}

C++: #include <stdio.h>
#include <math.h>

int main()
{
  int setcount;
  float x1, y1, x2, y2, x3, y3;
  float nx1, ny1, nx2, ny2;
  float nr1, nr2;
  float xp, yp, r;
  int tx, ty, tr, rem;
  int i;

  scanf("%d", &setcount);
  for(i=0; i<setcount; i++){
    scanf("%f %f %f %f %f %f", &x1, &y1, &x2, &y2, &x3, &y3);
    nx1=x2-x1; ny1=y2-y1;
    nx2=x3-x1; ny2=y3-y1;
    nr1=nx1^2+ny1^2; nr2=nx2^2+ny2^2;
    nr1*=0.5f; nr2*=0.5f;

    if(nx1==0){
      nr1/=ny1; ny1=1.0f;
      nr2-=nr1*ny2; ny2=0.0f;
      nr2/=nx2; nx2=1.0f;
    }
    else {
      //normalize
      ny1/=nx1; nr1/=nx1; nx1=1.0f;
      //subtraction
      ny2-=ny1*nx2; nr2-=nr1*nx2; nx2=0.0f;
      //normalize
      nr2/=ny2; ny2=1.0f;
      //subtraction
      nr1-=nr2*ny1; ny1=0.0f;
    }


    printf("%.3f %.3f %.3f\n", xp, yp, r);
  }

  return 0;
}

C++: #include <iostream>
#include <cmath>
using namespace std;
int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    int n; cin >> n;
    double x1, y1, x2, y2, x3, y3;
    for (int i=0; i<n; ++i) {
        cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
        if (y1 == y3) swap(y3, y2);
        if (y2 == y3) swap(y3, y1);
        double px, py, r;
        double a = x2 - x3;
        double b = y2 - y3;
        double c = x2 + x3;
        double d = y2 + y3;
        double e = x3 - x1;
        double f = y3 - y1;
        double g = x3 + x1;
        double h = y3 + y1;
        px = ((a/b)*(c/2) + d/2 - (e/f)*(g/2) - h/2) / (a/b - e/f);
        py = -(a/b) * px + (a/b) * c/2 + d/2;
        r = sqrt((x1 - px) * (x1 - px) + (y1 - py) * (y1 - py));
        cout.precision(3);
        cout << fixed << px << " " << py << " " << r << "\n";
    }
    return 0;
}

C++: #include<complex>
#include<cstdio>
#include<cmath>
using namespace std;
typedef complex<double> P;
class Tr{
	P a,b,c;double A,B,C;double x,y,z;
	double F(double a,double b, double c){
		return acos((b*b+c*c-a*a)/(2*b*c));
	}
public:
	Tr(P p1, P p2, P p3){
		a=p1;b=p2;c=p3;B=abs(c-a);A=abs(b-c);C=abs(a-b);x=F(A,B,C);y=F(B,C,A);z=F(C,A,B);
	}
	double R(){
		return A/sin(x)/2.;
	}
	double X(){
		double A=sin(2*x),B=sin(2*y),C=sin(2*z);
		return(a.real()*A+b.real()*B+c.real()*C)/(A+B+C);
	}
	double Y(){
		double A=sin(2*x),B=sin(2*y),C=sin(2*z);
		return(a.imag()*A+b.imag()*B+c.imag()*C)/(A+B+C);
	}
};
int main(){
	int n,i;
	double x1,x2,x3,y1,y2,y3;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);
		P a(x1,y1),b(x2,y2),c(x3,y3);
		Tr T(a,b,c);
		printf("%.3f %.3f %.3f\n",T.X(),T.Y(),T.R());
	}
}

C++: #include <iostream>
#include <cmath>
 
using namespace std;
 
int main(int argc, char **argv)
{
    int n;
    float x1, y1, x2, y2, x3, y3, a1, a2, b1, b2, c1, c2;
    cin >> n;
    while(n--){
        cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
        a1 = 2*(x2-x1);
        b1 = 2*(y2-y1);
        c1 = x1*x1 - x2*x2 + y1*y1 - y2*y2;
        a2 = 2*(x3-x1);
        b2 = 2*(y3-y1);
        c2 = x1*x1 - x3*x3 + y1*y1 - y3*y3;
         
        x3 = (b1*c2-b2*c1)/(a1*b2-a2*b1);
        y3 = (c1*a2-c2*a1)/(a1*b2-a2*b1);
        a1 = sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
        printf("%.3f %.3f %.3f\n", x3, y3, a1);
    }
     
    return 0;
}