POJ2996

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;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值