首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

【残缺棋盘】的有关问题,可能是数组方面弄错了,多多指教

2012-09-08 
【残缺棋盘】的问题,可能是数组方面弄错了,多多指教/*残缺棋盘 的问题,我的代码有那么一点疑问,但是我总是不

【残缺棋盘】的问题,可能是数组方面弄错了,多多指教
/*
 残缺棋盘 的问题,我的代码有那么一点疑问,但是我总是不知道它为什么不对?在函数OutputBoard(int size)中的四个if语句部分,希望各位指点一下
*/
#include<iostream>
using namespace std;

int Board[100][100],amount=0;

void OutputBoard(int size)
{
int i,j;
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
{
if(Board[i][j]<10)cout<<" ";
else cout<<" ";
cout<<Board[i][j];
}
cout<<endl;
}
}

//[h2,l2]残缺方格的坐标
void Cover(int h1,int l1,int h2,int l2,int size)
{
if(size<2)return;
int s,t;
s=size/2;
amount++;//计算放置棋子的号码
t=amount;//放置棋子的号码

//判断语句里与[s,s]比较
//每一个if都是在解决一个小问题
if(h2<h1+s && l2<l1+s)//残缺方格在左上角
{
Cover(h1,l1,h2,l2,s);//cover左上角的棋盘
//cover中间部分//当s=1
Board[h1+s][l1+s]=t;
Board[h1+s-1][l1+s]=t;
Board[h1+s][l1+s-1]=t;
Cover(h1,l1+s,h1+s-1,l1+s,s);//cover右上角
Cover(h1+s,l1,h1+s,l1+s-1,s);//cover左下角
Cover(h1+s,l1+s,h1+s,l1+s,s);//cover右下角
}
else if(h2<h1+s&&l2>=l1+s)//cover左下角
{
Cover(h1,l1+s,h2,l2,s);
Board[h1+s][l1+s-1]=t;
Board[h1+s][l1+s]=t;
Board[h1+s-1][l1+s-1]=t;
Cover(h1,l1,h1+s-1,l1+s-1,s);//cover左上角
Cover(h1,l1+s,h1+s,l1+s-1,s);//cover左下角
Cover(h1+s,l1+s,h1+s,l1+s,s);//cover右下角
}
else if(h2>=h1+s&&l2<l1+s)//残缺方格在右上角
{
Cover(h1+s,l1,h2,l2,s);
Board[h1+s][l1+s]=t;
Board[h1+s-1][l1+s]=t;
Board[h1+s-1][l1+s-1]=t;
Cover(h1,l1+s,h1+s-1,l1+s,s);//cover左上角
Cover(h1,l1,h1+s-1,l1+s-1,s);//cover右上角
Cover(h1+s,l1+s,h1+s,l1+s,s);//cover右下角
}
else if(h2>=h1+s&&l2>=l1+s)//残缺方格在右下角
{
Cover(h1+s,l1+s,h2,l2,s);
Board[h1+s-1][l1+s-1]=t;
Board[h1+s-1][l1+s]=t;
Board[h1+s][l1+s-1]=t;
Cover(h1,l1+s,h1+s-1,l1+s,s);
Cover(h1+s,l1,h1+s,l1+s-1,s);
Cover(h1+s,l1+s,h1+s-1,l1+s-1,s);
}
}

int main()
{
int h1=0,l1=0,h2,l2;
int s,size=1;
int i,j;
cin>>s;
for(i=0;i<s;i++)
{
size*=2;//棋盘大小
}
cin>>h2>>l2;
Cover(h1,l1,h2,l2,size);
OutputBoard(size);
return 0;
}

[解决办法]
if(Board[i][j]<10)cout<<" ";
else cout<<" ";
>>这个有区别吗?没用吧

貌似编译通过了,逻辑错误就要自己debug了
[解决办法]
if(Board[i][j]<10)cout<<" ";//这里两个空格
else cout<<" ";

我测了一下逻辑错误
左下角时 改为 Cover(h1+s,l1,h1+s,l1+s-1,s);//cover左下角
右下角时 最后一行 改 Cover(h1,l1,h1+s-1,l1+s-1,s);

热点排行