POJ原址:POJ2996
第一次写完程序写了文章也还不轻松,因为还有一个2993,哭。
太需要耐心和细心了,可惜细心我一直都没有。
哎,修改了很多little points,程序里标出了,就不在这儿多说了。
值得一提的是,原来棋子的数目是不定的,在我以为white都搞定了,black也不过是类比的时候,发现black和white长得居然不一样,又把输出全部都改了一遍。
这代码简单粗暴又臭又长没内涵,没办法。
没有参考链接。
程序:
#include<iostream>
using namespace std;
int main()
{
char map[9][9],map1[9][33],map2[34][400];//map1数组用来扔掉行分隔符,map数组扔掉了所有分隔符
memset(map1,0,sizeof(map1));
int i,j,x;
for(i=0;i<17;i++)
cin>>map2[i];
for(i=0;i<17;i++)
if(i%2!=0)
strcpy(map1[i/2],map2[i]);//至此抽去了带元素的行
for(i=0;i<8;i++)
{
for(j=0;j<33;j++)
{
if(j%4==2)
map[i][j/4]=map1[i][j];
}
}//至此滤掉了棋盘所有分隔符
char kx[100],ky[100],qx[100],qy[100],rx[100],ry[100];
char bx[100],by[100],nx[100],ny[100],px[100],py[100];
memset(kx,0,sizeof(kx));memset(ky,0,sizeof(kx));
memset(qx,0,sizeof(kx));memset(qy,0,sizeof(kx));
memset(rx,0,sizeof(kx));memset(ry,0,sizeof(kx));
memset(bx,0,sizeof(kx));memset(by,0,sizeof(kx));
memset(nx,0,sizeof(kx));memset(ny,0,sizeof(kx));
memset(px,0,sizeof(kx));memset(py,0,sizeof(kx));
int k=0,q=0,r=0,b=0,n=0,p=0;//粗心,都没有赋初值怎么能不死循环
for(i=7;i>=0;i--)
{
for(j=0;j<=7;j++)
{
if(map[i][j]=='K')
{
kx[k]=j+'a';
ky[k++]=8-i+'0';
}
else if(map[i][j]=='Q')
{
qx[q]=j+'a';
qy[q++]=8-i+'0';
}
else if(map[i][j]=='R')
{
rx[r]=j+'a';
ry[r++]=8-i+'0';
}
else if(map[i][j]=='B')
{
bx[b]=j+'a';
by[b++]=8-i+'0';
}
else if(map[i][j]=='N')
{
nx[n]=j+'a';
ny[n++]=8-i+'0';
}
else if(map[i][j]=='P')
{
px[p]=j+'a';
py[p++]=8-i+'0';
}
else ;
}
}
cout<<"White: ";
if(k!=0)
for(k=0;kx[k]!=0&&ky[k]!=0;k++)
cout<<'K'<<kx[k]<<ky[k]<<',';
if(q!=0)
for(q=0;qx[q]!=0&&qy[q]!=0;q++)
cout<<'Q'<<qx[q]<<qy[q]<<',';
if(r!=0)
for(r=0;rx[r]!=0&&ry[r]!=0;r++)
cout<<'R'<<rx[r]<<ry[r]<<',';
if(b!=0)
for(b=0;bx[b]!=0&&by[b]!=0;b++)
cout<<'B'<<bx[b]<<by[b]<<',';
if(n!=0)
for(n=0;nx[n]!=0&&ny[n]!=0;n++)
cout<<'N'<<nx[n]<<ny[n]<<',';
int p_len=0;
if(p!=0)
{
for(p=0;px[p]!=0&&py[p]!=0;p++)
p_len++;
for(p=0;p<p_len-1;p++)
cout<<px[p]<<py[p]<<',';
cout<<px[p_len-1]<<py[p_len-1];
}
cout<<endl;
//white的输出结束
memset(kx,0,sizeof(kx));memset(ky,0,sizeof(kx));
memset(qx,0,sizeof(kx));memset(qy,0,sizeof(kx));
memset(rx,0,sizeof(kx));memset(ry,0,sizeof(kx));
memset(bx,0,sizeof(kx));memset(by,0,sizeof(kx));
memset(nx,0,sizeof(kx));memset(ny,0,sizeof(kx));
memset(px,0,sizeof(kx));memset(py,0,sizeof(kx));
k=0;q=0;r=0;b=0;n=0;p=0;
for(i=0;i<=7;i++)
{
for(j=0;j<=7;j++)
{
if(map[i][j]=='k')
{
kx[k]=j+'a';
ky[k++]=i+1+'0';
}
else if(map[i][j]=='q')
{
qx[q]=j+'a';
qy[q++]=i+1+'0';
}
else if(map[i][j]=='r')
{
rx[r]=j+'a';
ry[r++]=i+1+'0';
}
else if(map[i][j]=='b')
{
bx[b]=j+'a';
by[b++]=i+1+'0';
}
else if(map[i][j]=='n')
{
nx[n]=j+'a';
ny[n++]=i+1+'0';
}
else if(map[i][j]=='p')
{
px[p]=j+'a';
py[p++]=i+1+'0';
}
else ;
}
}
//注意所有输出都要用9-,因为记录的是次数而不是位置
//呵呵了,忘了都是字符,应该都用字符'9'来减
//好坑,这输出方式。。居然还一个是char一个是int,哎,尽力了,过了就好
cout<<"Black: ";
if(k!=0)
for(k=0;kx[k]!=0&&ky[k]!=0;k++)
cout<<'K'<<kx[k]<<9-(ky[k]-'0')<<',';
if(q!=0)
for(q=0;qx[q]!=0&&qy[q]!=0;q++)
cout<<'Q'<<qx[q]<<9-(qy[q]-'0')<<',';
if(r!=0)
for(r=0;rx[r]!=0&&ry[r]!=0;r++)
cout<<'R'<<rx[r]<<9-(ry[r]-'0')<<',';
if(b!=0)
for(b=0;bx[b]!=0&&by[b]!=0;b++)
cout<<'B'<<bx[b]<<9-(by[b]-'0')<<',';
if(n!=0)
for(n=0;nx[n]!=0&&ny[n]!=0;n++)
cout<<'N'<<nx[n]<<9-(ny[n]-'0')<<',';
p_len=0;
if(p!=0)
{
for(p=0;px[p]!=0&&py[p]!=0;p++)
p_len++;
for(p=0;p<p_len-1;p++)
cout<<px[p]<<9-(py[p]-'0')<<',';
cout<<px[p_len-1]<<9-(py[p_len-1]-'0');
}
cout<<endl;
return 0;
}