读书人

小弟刚学C今天正好看到一道二维数组

发布时间: 2013-08-01 15:23:18 作者: rapoo

小弟刚学C,今天正好看到一道二维数组的题目,想求教各位大侠!谢谢!
题目是这样的:有一个二维数组 block[][4],在一个四行四列的框中,需要判定,
当某一行或者某一列4个字母或者斜行里4个字母全部为“a”时,表示“a win”
当某一行或者某一列4个字母或者斜行里4个字母里有3个“a”和一个“c”时,也算“a win”。
当某一行或者某一列4个字母或者斜行里4个字母全部为“b”时,“b win”
当某一行或者某一列4个字母或者斜行里4个字母里有3个“b”和一个“c”时,也算“b win”。
就是字母“c”有点万精油的意思,可以代替“a”,也可以代替“b”,但是只有有一个“c”,如果有2个“c”则不算获胜
当16个空格中有一个为“.”(表示空,没有字母),则表示“game is not over”
当16个字母全部填完,且没有空,且没有满足上面任何条件,则“draw”

给了个主函数
int caculate(char block[][4])
{


return ERROR;
}

小弟刚学习C,有点无从下手,求教各位大侠,能否写个程序让小弟学习下!谢谢!



#define ERROR 0
#define TRUE1
int caculate(char block[][4])
{


int i, j;
//减去a后,block变成0,1,2和-51组成数据阵
for(i = 0; i < 4; ++i)
{
for(j = 0; j < 4; ++j)
{
block[i][j] -= 'a';
}
}

int sum[11] = {0};//存储每行列和对角线的和
for(i = 0; i < 4; ++i)
{
for(j = 0; j < 4; ++j)
{
sum[i] += block[i][j];//1-4行
}
sum[4] += block[i][0];//1列
sum[5] += block[i][1];//2列
sum[6] += block[i][2];//3列
sum[7] += block[i][3];//4列
sum[8] += block[i][i];//主对角线
sum[9] += block[i][3 - i];//次对角线
}

sum[10] += (sum[0] + sum[1] + sum[2] + sum[3]);
if(sum[10] < 0)//如果填满那么总和不是负值,最小是0即全为a,如果15个c一个空,-51+30=-21依旧为-,因此可行
{
printf("game is not over!\n");
return ERROR;//不知到lz要不要退出函数,如果没有填完,我让它退出了。如果不退出,lz删掉此句即可,最好是退出
}
//如果没有退出,也就是填满了
for(i = 0; i < 10; ++i)
{
if(sum[i] == 0
[解决办法]
sum[i] == 2)//4a, 3a1c
{
printf("a win\n");
break;
}
if(sum[i] == 4
[解决办法]
sum[i] == 5)//4b,3b1c
{
printf("b win\n");
break;
}
}

printf("draw!\n");
return TRUE;
}

读书人网 >C语言

热点推荐