POJ 2996 模拟,读题

来源:互联网 发布:手机签名设计软件 编辑:程序博客网 时间:2024/06/05 10:40

题目链接:这里
题意:打印棋盘上棋子的位置。
解法:
研究一下输出:
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;}
0 0
原创粉丝点击