UVA 127 (暑期-线性表-B-"Accordian" Patience)
2014-07-21 09:24
399 查看
#include <cstdio> #include <cstring> int main() { //card[55][55][2] : 最多有可能有 52 叠牌, 每叠牌最多有 52 张牌, 每张牌有数字和花色 //每一叠牌, card[i][ card[i][54][0]-1 ][0] card[i][ card[i][54][0]-1 ][1] 存这叠牌的最上面那张牌的数字和花色 //card[i][54][0]存张数, card[i][0][0], card[i][0][1] 存折叠牌最下面那张牌的数字和花色 char card[55][55][2]; char str[100]; while (gets(str) && str[0] != '#') { for (int i = 0; i < 26; i++) { card[i][0][0] = str[i * 3]; card[i][0][1] = str[i * 3 + 1]; card[i][54][0] = 1; } gets(str); for (int i = 26; i < 52; i++) { card[i][0][0] = str[(i - 26) * 3]; card[i][0][1] = str[(i - 26) * 3 + 1]; card[i][54][0] = 1; } int i = 0; while (i < 52) { if (i == 0) { i++; while (card[i][54][0] == 0) { i++; } } int j = i-1; int count_1 = 0, count_2 = 0, kong_1, kong_2, kong_3 = 0, kong_4 = 0; //找到左边第三张牌的位置 和左边第一张牌的位置 while (count_1 < 3) { if (card[j][54][0] != 0) { count_1++, count_2 = 1; if (count_1 == 1) kong_2 = j;//记录左边第一张牌的位置 } if (count_1 == 3) kong_1 = j; //记录左边第三张牌的位置 if (j > 0) j--; else break; } if (count_1 == 3) { //是否匹配 if (card[i][ card[i][54][0]-1 ][0] == card[kong_1][ card[kong_1][54][0]-1 ][0] || card[i][ card[i][54][0]-1 ][1] == card[kong_1][ card[kong_1][54][0]-1 ][1]) { card[kong_1][54][0]++; //张数加一 card[kong_1][ card[kong_1][54][0]-1 ][0] = card[i][ card[i][54][0]-1 ][0]; //把牌叠好后,最上面的那张数字 card[kong_1][ card[kong_1][54][0]-1 ][1] = card[i][ card[i][54][0]-1 ][1]; //把牌叠好后,最上面的那花色 card[i][54][0]--; //去掉这张牌 i = kong_1; kong_3 = 1; } } if (count_2 == 1 && !kong_3) { if (card[i][ card[i][54][0]-1 ][0] == card[kong_2][ card[kong_2][54][0]-1 ][0] || card[i][ card[i][54][0]-1 ][1] == card[kong_2][ card[kong_2][54][0]-1 ][1]) { card[kong_2][54][0]++; //张数加一 card[kong_2][ card[kong_2][54][0]-1 ][0] = card[i][ card[i][54][0]-1 ][0]; //把牌叠好后,最上面的那张数字 card[kong_2][ card[kong_2][54][0]-1 ][1] = card[i][ card[i][54][0]-1 ][1]; //把牌叠好后,最上面的那花色 card[i][54][0]--; //去掉这张牌 i = kong_2; kong_4 = 1; } } if(!kong_3 && !kong_4) { i++; while (card[i][54][0] == 0) { //找到右边第一张牌的位置 i++; } } } int num = 0; for (int r = 0; r < 52; r++) { if (card[r][54][0] != 0) num++; } if (num == 1) printf("%d pile remaining:", num); else printf("%d piles remaining:", num); for (int r = 0; r < 52; r++) { if (card[r][54][0] != 0) printf(" %d", card[r][54][0]); } printf("\n"); } return 0; }
相关文章推荐
- "Accordian" Patience UVA - 127
- "Accordian" Patience UVa OJ 127 纸牌游戏
- "Accordian" Patience UVA - 127 (数据结构)
- uva 127 "Accordian" Patience --------线性表
- UVa 127 - "Accordian" Patience(模拟)
- UVa 127 - "Accordian" Patience
- UVa 127 - "Accordian" Patience
- UVA 127 - "Accordian" Patience---wa 了许久,错误原因见注释!
- UVA 127 "Accordian" Patience
- UVa 127 "Accordian" Patience (模拟链表&栈)
- UVa 127 - "Accordian" Patience
- UVA 127 "Accordian" Patience
- Uva - 127 - "Accordian" Patience
- UVa 127 "Accordian" Patience
- uva 127 - "Accordian" Patience
- UVA127 - "Accordian" Patience
- uva127 "Accordian" Patience
- Uva - 127 - "Accordian" Patience
- UVa:127 "Accordian" Patience
- uva127 "Accordian" Patience poj1214 模拟