Microsoft Interview Question
Software Engineer in TestsI would like to change onion834 code..
int diagonalflag=1;
for(i=0;i<N && !over; i++)
{
j=0;
for(j=0;j<N && arr[i][j]==player;j++) //check row
if(j==N) over=1;
for(j=0;j<N && arr[j][i] == player; j++) //check column
if(i==N) over=1;
if(arr[i][i]!=player){
diagonalflag = 0;
}
}
if(over==1 || diagonalflag==1){
print("player wins");
}
//can be modified for 2 players
bool FindWinner(int a[][],int n)
{
bool dial=true;
bool dia2=true;
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)//check row
{
if(a[i][j]==0)//this row is failed
break;
if(j==n-1)//this row is successful
return true;
}
for(int j=0;j<n;++j)//check col
{
if(a[j][i]==0)//this col is failed
break;
if(j==n-1)//this col is successful
return true;
}
if(dia1&&!a[i][i])
dia1=0;
if(dia2&&!a[i][n-1-i])
dia2=0;
}
if(dia1||dia2)
return true;
}
Assuming the array is of size NxN and N is an odd number.
- onion834 September 29, 2008over = 0;
for(i=0;i<=N && !over;i++)
{
j=0;
for(j=0, player = arr[i][j]; player == a[i][j] ; j++) //check row
if(j==N) over = 1;
for(j=0, player = arr[j][i]; player == a[j][i] && !over ; j++) // check col
if(j==N) over = 1;
if(i==1 || i == (N+1)/2) //check diagonal and set if over
}
print "winner is " player;