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
- POJ 2996 模拟,读题
- poj 2996 模拟
- POJ 2996 简单模拟
- POJ 2996 & 2993 国际象棋布局 模拟
- POJ 1017 模拟啊模拟
- POJ 1565 水 模拟
- Poj 模拟题
- POJ 1068 括号模拟
- POJ 2453 简单模拟
- POJ 2833 简单模拟
- POJ 1016 模拟题
- 模拟退火 poj 1379
- poj 1379 模拟退火
- poj 3285 模拟退火,
- POJ 1068 Parencodings 模拟
- POJ 3295 Tautology 模拟
- POJ 1099 模拟
- poj 3427 模拟
- 《一本书读懂TCP/IP》读后感——第二章 TCP/IP网络组成
- zoj 1041_Transmitters_计算几何
- MVC框架显示层——Velocity技术
- "Expression of type "UIViewController?" is unused".
- Xamarin绑定微信SDK 实现分享功能
- POJ 2996 模拟,读题
- TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
- 转:在 Ubuntu 上使用 Nginx 部署 Flask 应用
- UIScrollView详解
- 最短路径问题---Floyd算法详解
- 绘制loss和accuracy曲线
- java面向对象
- bzoj3233 [Ahoi2013]找硬币
- cs app深入理解计算机系统:第五章 优化程序性能 几个优化的java实现