Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	scanner.Split(bufio.ScanWords)
	scanner.Scan()
	table := [9][9]int{}
	check := [9][9]bool{}
	n, _ := strconv.Atoi(scanner.Text())
	for n > 0 {
		n--
		for i := 0; i < 9; i++ {
			for j := 0; j < 9; j++ {
				table[i][j] = nextInt()
			}
		}
		for i := 0; i < 9; i++ {
			for j := 0; j < 9; j++ {
				ok := true
				for k := 0; k < 9; k++ {
					if table[i][j] == table[i][k] && j != k {
						ok = false
					}
				}
				for k := 0; k < 9; k++ {
					if table[i][j] == table[k][j] && i != k {
						ok = false
					}
				}
				seci := i / 3
				secj := j / 3
				for k := 0; k < 3; k++ {
					for l := 0; l > 3; l++ {
						if table[seci*3+k][secj*3+l] == table[i][j] && seci*3+k != i && secj*3+l != j {
							ok = false
						}
					}
				}
				if !ok {
					check[i][j] = true
				}
			}
		}
		for i := 0; i < 9; i++ {
			for j := 0; j < 9; j++ {
				if check[i][j] {
					fmt.Print("*")
				} else {
					fmt.Print(" ")
				}
				fmt.Print(table[i][j])
			}
			fmt.Println()
		}
		if n != 0 {
			fmt.Println()
		}
	}
}

func nextInt() int {
	scanner.Scan()
	i, e := strconv.Atoi(scanner.Text())
	if e != nil {
		panic(e)
	}
	return i
}

C++: #include<iostream>
#include<string.h>
#include<vector>
#include<list>
#include<stdio.h>
#include<math.h>
#include<iomanip>
#include<map>
#include<stack>
#include<queue>
#define range(i,a,b) for(int i = (a); i < (b); i++)
#define rep(i,b) range(i,0,b)
#define debug(x) cout << "debug " << x << endl;
using namespace std;

int ma[9][9];

void solve(int y, int x, int check[][9]){
    rep(i, 9){
        if(ma[i][x] == ma[y][x]) check[i][x]++;
        if(ma[y][i] == ma[y][x]) check[y][i]++;
    }
    rep(i, 3){
        rep(j, 3){
            if(ma[i + y / 3 * 3][j + x / 3 * 3] == ma[y][x])
                check[i + y / 3 * 3][j + x / 3 * 3]++;
        }
    }
}

int main(){
    int n;
    while(cin >> n){
        rep(i, n){
            int check[9][9] = {0};
            rep(i, 9){
                rep(j, 9){
                    cin >> ma[i][j];
                }
            }
            rep(i, 9){
                rep(j, 9){
                    solve(i, j, check);
                }
            }
            rep(i,9){
                rep(j,9){
                    if(check[i][j] > 3)
                        cout << '*';
                    else
                        cout << ' ';
                    cout << ma[i][j];
                }
                cout << endl;
            }
        }
    }
}

C++: #include<iostream>
using namespace std;
int main(){
  int n,c,d,e;
  cin>>n;
  int ku[n][9][9],map[n][9][9];
  for(int i=0;i<n;i++){
    for(int j=0;j<9;j++){
      for(int k=0;k<9;k++){
        map[i][j][k]=0;
      }
    }
  }
  for(int k=0;k<n;k++){
    for(int i=0;i<9;i++){
      for(int j=0;j<9;j++){
	cin>>ku[k][i][j];
      }
    }
 for(int i=0;i<9;i++){
   for(int j=0;j<9;j++){
     c=0;                       //tate and yoko
     d=0;
     for(int f=0;f<9;f++){
       if(ku[k][i][j]==ku[k][i][f])c++;
       if(ku[k][j][i]==ku[k][f][i])d++;
     }
       if(c>1)map[k][i][j]=1;
       if(d>1)map[k][j][i]=1;
       e=0;
        if(i<=2 && j<=2){       //3*3 1
	 for(int f=0;f<3;f++){
	   for(int s=0;s<3;s++){
	     if(ku[k][f][s]==ku[k][i][j])e++;
	   }
	 }
	 if(e>1)map[k][i][j]=1;
       }
      else if(i<=2 && j>=3 && j<=5){       //3*3 2
	 for(int f=0;f<3;f++){ 
	   for(int s=3;s<6;s++){
	     if(ku[k][f][s]==ku[k][i][j])e++;
	   }
	 }
	 if(e>1)map[k][i][j]=1;
       }
      else if(i<=2 && j>=6){       //3*3 3 
	 for(int f=0;f<3;f++){
	   for(int s=6;s<9;s++){
	     if(ku[k][f][s]==ku[k][i][j])e++;
	   }
	 }
	 if(e>1)map[k][i][j]=1;
       }
      else if(i>=2 && i<=5 && j<=2){       //3*3 4
	 for(int f=3;f<6;f++){
	   for(int s=0;s<3;s++){
	     if(ku[k][f][s]==ku[k][i][j])e++;
	   }
	 }
	 if(e>1)map[k][i][j]=1;
       }
      else if(i>=2 && i<=5 && j<=2 && j<=5){       //3*3 5 
	for(int f=3;f<6;f++){
	  for(int s=3;s<6;s++){
	     if(ku[k][f][s]==ku[k][i][j])e++;
	  }
	}
	 if(e>1)map[k][i][j]=1;
      }
      else if(i>=2 && i<=5 && j>=6){       //3*3 6 
	for(int f=3;f<6;f++){
	  for(int s=6;s<9;s++){
	     if(ku[k][f][s]==ku[k][i][j])e++;
	  }
	 }
	 if(e>1)map[k][i][j]=1;
      }
      else if(i>=6 && j<=2){       //3*3 7 
	 for(int f=6;f<9;f++){
	   for(int s=0;s<3;s++){
	     if(ku[k][f][s]==ku[k][i][j])e++;
	   } 
	 } 
	 if (e>1)map[k][i][j]=1;
       } 
      else if(i>=6 && j>=2 && j<=5){       //3*3 8
	 for(int f=6;f<9;f++){
	   for(int s=3;s<6;s++){
	     if(ku[k][f][s]==ku[k][i][j])e++;
	   }
	 }
	 if(e>1)map[k][i][j]=1;
       }
      else if(i>=6 && j>=6){       //3*3 9
	 for(int f=6;f<9;f++){
	   for(int s=6;s<9;s++){
	     if(ku[k][f][s]==ku[k][i][j])e++;
	   }
	 }
	 if(e>1)map[k][i][j]=1;
       }   
   }
 }
  }   
  for(int s=0;s<n;s++){
    for(int i=0;i<9;i++){
      for(int j=0;j<9;j++){
	if(map[s][i][j]==0)cout<<" "<<ku[s][i][j];
	else if(map[s][i][j]==1)cout<<"*"<<ku[s][i][j];
      }  
      cout<<endl;
    }
    if(s!=n-1)cout<<endl;
  }
}

C++: #include <iostream>
#include <vector>

using namespace std;

void solve()
{
	int n;
	cin >> n;
	while(n--)
	{
		char field[9][9];
		char isWrong[9][9];
		for(int i = 0; i < 9; ++i)
		{
			for(int j = 0; j < 9; ++j)
			{
				cin >> field[i][j];
				isWrong[i][j] = ' ';
			}
		}
		for(int i = 0; i < 9; ++i)
		{
			vector<int> count(10);
			bool flag = false;
			for(int j = 0; j < 9; ++j)
			{
				++count[field[i][j] - '0'];
				if(count[field[i][j] - '0'] >= 2)
				{
					flag = true;
				}
			}
			if(flag)
			{
				for(int j = 1; j < 10; ++j)
				{
					if(count[j] >= 2)
					{
						for(int k = 0; k < 9; ++k)
						{
							if(field[i][k] == j + '0')
							{
								isWrong[i][k] = '*';
							}
						}
					}
				}
			}
		}
		
		for(int i = 0; i < 9; ++i)
		{
			vector<int> count(10);
			bool flag = false;
			for(int j = 0; j < 9; ++j)
			{
				++count[field[j][i] - '0'];
				if(count[field[j][i] - '0'] >= 2)
				{
					flag = true;
				}
			}
			if(flag)
			{
				for(int j = 1; j < 10; ++j)
				{
					if(count[j] >= 2)
					{
						for(int k = 0; k < 9; ++k)
						{
							if(field[k][i] == j + '0')
							{
								isWrong[k][i] = '*';
							}
						}
					}
				}
			}
		}

		for(int i = 0; i < 3; ++i)
		{
			for(int j = 0; j < 3; ++j)
			{
				int count[10] = {};
				bool flag = false;
				for(int k = 0; k < 3; ++k)
				{
					for(int l = 0; l < 3; ++l)
					{
						++count[field[3 * i + k][3 * j + l] - '0'];
						if(count[field[3 * i + k][3 * j + l] - '0'] >= 2)
						{
							flag = true;
						}
					}
				}
				if(flag)
				{
					for(int k = 1; k < 10; ++k)
					{
						if(count[k] >= 2)
						{
							for(int l = 0; l < 3; ++l)
							{
								for(int m = 0; m < 3; ++m)
								{
									if(field[3 * i + l][3 * j + m] == k + '0')
									{
										isWrong[3 * i + l][3 * j + m] = '*';
									}
								}
							}
						}
					}
				}
			}
		}
		for(int i = 0; i < 9; ++i)
		{
			for(int j = 0; j < 9; ++j)
			{
				cout << isWrong[i][j] << field[i][j];
			}
			cout << endl;
		}
	}
}

int main()
{
	solve();
	return(0);
}