题目链接:这里 题意:打印棋盘上棋子的位置。 解法: 研究一下输出: White: Ke1,Qd1,Ra1,Rh1,Bc1,Bf1,Nb1,a2,c2,d2,f2,g2,h2,a3,e4 Black: Ke8,Qd8,Ra8,Rh8,Bc8,Ng8,Nc6,a7,b7,c7,d7,e7,f7,h7,h6 总共有K,Q,R,B,N,P六种棋子。其中除了P以外所有的棋子在输出位置的同时也要输出棋子的类型。例如:Ke1 , 指的是位于第一行(注意这里的行数,规定最下面那一行开始,也就是和我们常规数组的标号相反),第e列(列数从小到大a-h和1-8是一样的)的K棋。 这题有几个地方需要注意: 1,棋盘中大写字母表示的是白方棋子,小写是黑方。 2,注意棋盘的行数是从最下面开始计数的。和数组的下标相反。也就是说数组行数为8的棋盘行 数为1(数组从1开始)。 3,最容易忽略也最重要的是:白旗和黑棋在输出的时候其实排序规则是不一样的(但是棋子的类型都要按照KQRBNP顺序)。 主要是行列的优先问题: 白棋先按行数(棋盘的行编号)升序排,然后按照列升序排。解决办法:按行升序扫描输出。 黑棋先按行数(棋盘的编号)降序排,然后按照列升序排。解决办法:按行降序扫描输出。 输出的时候主要是要注意一下循环扫描的顺序就行了。
//POJ 2996 #include <stdio.h> #include <string.h> #include <iostream> char mp[40][40]; int main() { for(int i = 0; i < 17; i++) scanf("%s", mp[i]); printf("White: "); //K for(int i = 15; i >= 1; i -= 2){ for(int j = 2; j <= 30; j += 4){ if(mp[i][j] == 'K'){ printf("K"); printf("%c%d", 'a'+j/4, 8-i/2); } } } //Q for(int i = 15; i >= 1; i -= 2){ for(int j = 2; j <= 30; j += 4){ if(mp[i][j] == 'Q'){ printf(",Q"); printf("%c%d", 'a'+j/4, 8-i/2); } } } //R for(int i = 15; i >= 1; i -= 2){ for(int j = 2; j <= 30; j += 4){ if(mp[i][j] == 'R'){ printf(",R"); printf("%c%d", 'a'+j/4, 8-i/2); } } } //B for(int i = 15; i >= 1; i -= 2){ for(int j = 2; j <= 30; j += 4){ if(mp[i][j] == 'B'){ printf(",B"); printf("%c%d", 'a'+j/4, 8-i/2); } } } //N for(int i = 15; i >= 1; i -= 2){ for(int j = 2; j <= 30; j += 4){ if(mp[i][j] == 'N'){ printf(",N"); printf("%c%d", 'a'+j/4, 8-i/2); } } } //P for(int i = 15; i >= 1; i-= 2){ for(int j = 2; j <= 30; j += 4){ if(mp[i][j] == 'P'){ printf(",%c%d", 'a'+j/4, 8-i/2); } } } printf("\n"); printf("Black: "); //k for(int i = 1; i <= 15; i += 2){ for(int j = 2; j <= 30; j += 4){ if(mp[i][j] == 'k'){ printf("K"); printf("%c%d", 'a'+j/4, 8-i/2); } } } //q for(int i = 1; i <= 15; i += 2){ for(int j = 2; j <= 30; j += 4){ if(mp[i][j] == 'q'){ printf(",Q"); printf("%c%d", 'a'+j/4, 8-i/2); } } } //R for(int i = 1; i <= 15; i += 2){ for(int j = 2; j <= 30; j += 4){ if(mp[i][j] == 'r'){ printf(",R"); printf("%c%d", 'a'+j/4, 8-i/2); } } } //B for(int i = 1; i <= 15; i += 2){ for(int j = 2; j <= 30; j += 4){ if(mp[i][j] == 'b'){ printf(",B"); printf("%c%d", 'a'+j/4, 8-i/2); } } } //N for(int i = 1; i <= 15; i += 2){ for(int j = 2; j <= 30; j += 4){ if(mp[i][j] == 'n'){ printf(",N"); printf("%c%d", 'a'+j/4, 8-i/2); } } } //P for(int i = 1; i <= 15; i += 2){ for(int j = 2; j <= 30; j += 4){ if(mp[i][j] == 'p'){ printf(",%c%d", 'a'+j/4, 8-i/2); } } } printf("\n"); return 0; }