POJ2996 Help Me with the Game 大模拟
http://blog.csdn.net/AXuan_K/article/details/37922039
题意:给定一个棋盘,输出个个棋子的位置。行数字表示,列字母表示。
注意:1、大写字母表示白色,小写字母表示黑色,表中的标点并没什么卵用。
2、该棋盘的排序和矩阵的行相反,即矩阵最后一行为棋盘第一行。
3、白棋按照行和列的升序排列。
4、黑棋行按照行降序排列,列升序排序。
5、最后的输出不带标点,列的字母为大写。
思路:数组存储棋子的类型,白棋按照从最后一行到第一行开始扫,黑棋按照从第一行到最后一行扫。如果存在棋子,输出其位置。
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 char a[6]={'K','Q','R','B','N','P'}; 7 char b[6]={'k','q','r','b','n','p'}; 8 char map[40][40]; 9 main() 10 { 11 int i,j,s1=0,s2=0,k; 12 for(i=1;i<=17;i++) 13 { 14 for(j=1;j<=33;j++) 15 { 16 cin>>map[i][j]; 17 if(map[i][j]=='P') 18 s1++; 19 if(map[i][j]=='p') 20 s2++; 21 } 22 } 23 printf("White: "); 24 for(k=0;k<6;k++) 25 { 26 for(i=17;i>=1;i--) 27 { 28 for(j=1;j<=33;j++) 29 { 30 if(k<=4&&i%2==0&&j%4==3) 31 { 32 if(map[i][j]==a[k]) 33 { 34 printf("%c%c%d,",a[k],'a'+(j+1)/4-1,9-i/2); 35 } 36 } 37 if(k==5&&i%2==0&&j%4==3) 38 { 39 if(map[i][j]==a[k]) 40 { 41 s1--; 42 if(s1==0) 43 printf("%c%d\n",'a'+(j+1)/4-1,9-i/2); 44 else 45 printf("%c%d,",'a'+(j+1)/4-1,9-i/2); 46 } 47 } 48 } 49 } 50 } 51 printf("Black: "); 52 for(k=0;k<6;k++) 53 { 54 for(i=1;i<=17;i++) 55 { 56 for(j=1;j<=33;j++) 57 { 58 if(k<=4&&i%2==0&&j%4==3) 59 { 60 if(map[i][j]==b[k]) 61 { 62 printf("%c%c%d,",a[k],'a'+(j+1)/4-1,9-i/2); 63 } 64 } 65 if(k==5&&i%2==0&&j%4==3) 66 { 67 if(map[i][j]==b[k]) 68 { 69 s2--; 70 if(s2==0) 71 printf("%c%d\n",'a'+(j+1)/4-1,9-i/2); 72 else 73 printf("%c%d,",'a'+(j+1)/4-1,9-i/2); 74 } 75 } 76 } 77 } 78 } 79 }