(9)二维数组

1.二维数组的遍历
  a[ i, j ]是a[ j ],不能表示二维数组.
2.二维数组的初始化
  .数组的列数是必须给出的,行数可以由编译器来数.
  .每行一个{ },逗号隔离.
  .最后的逗号可以保留,古老的传统.
  .如果省略,表示补0.
  .也可以固定位(C99 Only)
3.tic - tac - toe 游戏 [ 1-9.cpp ]
  .读入一个3x3的矩阵,矩阵中的数字为1表示该位
   置上有一个x,为零表示o
  .程序判断这个矩阵中是否有获胜的一方,并输出表示
   获胜一方的字符x或o,或输出无人获胜.

/*****************************************************************************************
Input a matrix of 3X3, the value of matrix is 1 express the position has a 'X', 0 express 'O'
here is a program to determine whether there is a winner in this matrix, and output the 
character representing wining side -- 'X' or 'O'
*****************************************************************************************/
#include <stdio.h>

int main()
{
	const int size = 3;
	int board[size][size];
	int numberofO, numberofX;
	int result = -1;  //Express no one wins.

//Initialize the board-prime
	for(int i=0; i<size; i++)
	{
		for(int j=0; j<size; j++)
		{
			scanf("%d", &board[i][j]);
		}
	}

//Iterate through the rows of prime
	if(result == -1)
	{	
		for(int i=0; i<size; i++)
		{
			numberofX = 0; numberofO = 0;
			for(int j=0; j<size; j++)
			{
				if(board[i][j])
					numberofX++;
				else
					numberofO++;
			}

			if(numberofO == 3)
			{
				result = 0;
				break;
			}
			if(numberofX == 3)
			{
				result = 1;
				break;
			}
		}
	}
/*
	if(result == -1)
	{
		for(int i=0; i<size && result=-1; i++)
		{
			numberofO = 0; numberofX = 0;
			for(int j=0; j<size; j++)
			{
				if(board[i][j])
					numberofX++;
				else
					numberofO++;
			}

			if(numberofO == size)
				result = 0;
			if(numberofX == size)
				result = 1;
		}
	}
*/
//Iterate through the column of the array.
	if(result == -1)
	{	
		for(int j=0; j<size; j++)
		{
			numberofO=0; numberofX=0;
			for(int i=0; i<size; i++)
			{
				if(board[i][j])
					numberofX++;
				else
					numberofO++;
			}

			if(numberofO == 3)
			{
				result = 0;
				break;
			}
			if(numberofX == 3)
			{
				result = 1;
				break;
			}
		}
	}

//Iterate through the left diagonal of prime.
	if(result == -1)
	{
		numberofX=0; numberofO=0;
		for(int i=0, j=0; i<size, j<size; i++,j++)
		{
			if(board[i][j])
				numberofX++;
			else
				numberofO++;
		}

		if(numberofO == 3)
		{
			result = 0;
		}
		else if(numberofX == 3)
		{
			result = 1;
		}
	}

//Iterate through the right diagonal of prime.
	if(result == -1)
	{
		numberofO=0; numberofX=0;
		for(int i=1; i<size; i++)
		{
			for(int j=size; j>0; j--)
			{
				if(numberofO == 3)
				{
					result = 0;
					break;
				}
				else if(numberofX == 3)
				{
					result = 1;
					break;
				}
			}

			if(numberofO == 3)
			{
				result = 0;
				break;
			}
			else if(numberofX == 3)
			{
				result = 1;
				break;
			}
		}
	}

//Output the result.
	if(result == 0)
		printf("Character of wining side is O!\n");
	else if(result == 1)
		printf("Character of wining side is X!\n");
	else
		printf("No one wins!\n");

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值