这里面一共有多少方格

核心提示以上回答的答案各种各样,只有一个是对的,72先不去管小的田字格,大的有4条竖线,4条横线,要组成长方形(包括正方形)需要2竖2横,把竖线编上1,2,3,4,我们可以选(1,2)(1,3)(1,4)(2,3)(2,4)(3,4)一共有6种选法

以上回答的答案各种各样,只有一个是对的,72

先不去管小的田字格,大的有4条竖线,4条横线,要组成长方形(包括正方形)

需要2竖2横,把竖线编上1,2,3,4,我们可以选(1,2)(1,3)(1,4)(2,3)(2,4)(3,4)一共有6种选法,同理横线也有6种选法,所以大图形中有6*6=36个

一个田字格中,有3*3=9个, 4个田字格中一共有4*9=36个

所以一共有36+36=72个

给你一份详细的代码吧,

已经编译运行确认了:

#include <iostream>

#include <string>

using namespace std;

typedef char chess[10]; //字符数组

typedef int temparr[10]; //整型数组

chess arr; //定义字符数组变量

temparr brr; //定义整型数组变量

int number,suc,n3,c3,n2,c2,n1,c1;

void inarrdata(chess a) //初始化棋盘编号

{

a[1]='1';a[2]='2';a[3]='3';

a[4]='4';a[5]='5';a[6]='6';

a[7]='7';a[8]='8';a[9]='9';

}

void display(chess a) //输出棋盘状态

{

cout<<endl;cout<<endl;

cout<<" "<<a[1]<<" "<<'|'<<" "<<a[2]<<" "<<'|'<<" "<<a[3]<<endl;

cout<<" -----------"<<endl;

cout<<" "<<a[4]<<" "<<'|'<<" "<<a[5]<<" "<<'|'<<" "<<a[6]<<endl;

cout<<" -----------"<<endl;

cout<<" "<<a[7]<<" "<<'|'<<" "<<a[8]<<" "<<'|'<<" "<<a[9]<<endl;

cout<<endl;cout<<endl;

}

int arrfull() //判断还有没有下棋的位置

{

int i;

int arrf=0;

for(i=1;i<=9;i++)

if(i==arr[i]-48) //如果字符arr[i]-48等于i

arrf=1; //那么arrf=1,也就是可以走棋

return arrf;

}

void cn(int line) //判断状态

{

switch(line)

{

case 0:c3=c3+1;break;

case 1:n2=n2+1;break;

case 2:c2=c2+1;break;

case 3:n1=n1+1;break;

case 4:c1=c1+1;break;

case 5:n3=n3+1;break;

}

}

int linenum(char a,char b,char c) //判断状态

{

int ln=6;

if((a=='X')&&(b=='X')&&(c=='X'))

ln=0;

if(((a=='O')&&(b=='O')&&(c!='O'))||((a=='O')&&(b!='O')&&(c=='O'))||((a!='O')&&(b=='O')&&(c=='O')))

ln=1;

if(((a=='X')&&(b=='X')&&(c!='X'))||((a=='X')&&(b!='X')&&(c=='X'))||((a!='X')&&(b=='X')&&(c=='X')))

ln=2;

if(((a=='O')&&(b!='O')&&(c!='O'))||((a!='O')&&(b=='O')&&(c!='O'))||((a!='O')&&(b!='O')&&(c=='O')))

ln=3;

if(((a=='X')&&(b!='X')&&(c!='x'))||((a!='X')&&(b=='X')&&(c!='X'))||((a!='X')&&(b!='X')&&(c=='X')))

ln=4;

if((a=='O')&&(b=='O')&&(c=='O'))

ln=5;

return ln;

}

int maxbrr(int *br) //判断最大权值

{

int temp,i,mb;

temp=-888;

for(i=1;i<=9;i++)

{

if(temp<=br[i])

{

temp=br[i];

mb=i;

}

}

return mb;

}

void manstep() //人走棋处理模块

{

int j;

display(arr);

if(arrfull()) //如果棋盘上还有下棋的位置,人走一步棋

{

cout<<"您要走哪一步?请输入数字(1--9):";

cin>>j;

while((j<1)||(j>9)||(j!=arr[j]-48))

{

cout<<"对不起,您输入的数字不对,请重新输入(1--9):";

cin>>j;

}

arr[j]='O';

n3=0;c3=0;n2=0;c2=0;n1=0;c1=0;

number=linenum(arr[1],arr[2],arr[3]);cn(number);

number=linenum(arr[4],arr[5],arr[6]);cn(number);

number=linenum(arr[7],arr[8],arr[9]);cn(number);

number=linenum(arr[1],arr[4],arr[7]);cn(number);

number=linenum(arr[2],arr[5],arr[8]);cn(number);

number=linenum(arr[3],arr[6],arr[9]);cn(number);

number=linenum(arr[1],arr[5],arr[9]);cn(number);

number=linenum(arr[3],arr[5],arr[7]);cn(number);

if(n3!=0) //您赢了

{

display(arr);

cout<<endl;

cout<<"恭喜您赢了!!!"<<endl;

suc=0;

}

}

}

void computerstep() //计算机走棋处理模块

{

int i;

if(arrfull()) //如果棋盘上还有可下棋的位置,则计算机走棋

{

for(i=1;i<=9;i++) //对每一步可走的棋进行计算

{

if(i==arr[i]-48)

{

c3=0;n2=0;c2=0;n1=0;c1=0;

arr[i]='X';

number=linenum(arr[1],arr[2],arr[3]);cn(number);

number=linenum(arr[4],arr[5],arr[6]);cn(number);

number=linenum(arr[7],arr[8],arr[9]);cn(number);

number=linenum(arr[1],arr[4],arr[7]);cn(number);

number=linenum(arr[2],arr[5],arr[8]);cn(number);

number=linenum(arr[3],arr[6],arr[9]);cn(number);

number=linenum(arr[1],arr[5],arr[9]);cn(number);

number=linenum(arr[3],arr[5],arr[7]);cn(number);

brr[i]=(128*c3-63*n2+31*c2-15*n1+7*c1); //计算此步权值

arr[i]=i+48;

}

else

brr[i]=-999;

}

arr[maxbrr(brr)]='X'; //确定计算机走哪一步,权值最大的一步

c3=0;n2=0;c2=0;n1=0;c1=0;

number=linenum(arr[1],arr[2],arr[3]);cn(number);

number=linenum(arr[4],arr[5],arr[6]);cn(number);

number=linenum(arr[7],arr[8],arr[9]);cn(number);

number=linenum(arr[1],arr[4],arr[7]);cn(number);

number=linenum(arr[2],arr[5],arr[8]);cn(number);

number=linenum(arr[3],arr[6],arr[9]);cn(number);

number=linenum(arr[1],arr[5],arr[9]);cn(number);

number=linenum(arr[3],arr[5],arr[7]);cn(number);

if(c3!=0) //计算机已赢

{

display(arr);

cout<<endl;

cout<<"计算机赢了!!!"<<endl;

suc=0;

}

}

else

suc=0;

}

int main()

{

cout<<"游戏规则:"<<endl<<"棋盘格式如图,人和计算机在棋盘上交替走棋"<<endl;

cout<<"约定计算机使用符号X,人使用符号O"<<endl;

cout<<"谁先使一横行或一竖行或对角线上有三个自己的符号,就胜利了!"<<endl;

string s="y";

string ch;

while(s=="y"||s=="Y")

{

inarrdata(arr); //棋盘坐标编号

display(arr); //显示初始棋盘

suc=1;

cout<<"请选择您是否先走?(y/n)";

cin>>ch;

while(ch!="y"&&ch!="Y"&&ch!="n"&&ch!="N")

{

cout<<"错误!请输入y或n:";

cin>>ch;

}

if((ch=="y")||(ch=="Y")) //输入Y,表示人先走棋

{

while(suc)

{

manstep();

computerstep();

}

}

else //计算机先走棋

{

while(suc)

{

computerstep();

if(suc)

manstep();

}

}

if(n3==0&&c3==0)

cout<<endl<<"和棋!"<<endl<<endl;

cout<<"再来一盘(y/n)?";

cin>>s;

while(s!="y"&&s!="Y"&&s!="n"&&s!="N")

{

cout<<"错误!请输入y或n:";

cin>>s;

}

}

return 0;

}

 
友情链接
鄂ICP备19019357号-22