-
个人简介
wobushigay shaoyuniubi666 kanwozhuyedeshigay #include #include #include <string.h> #include <stdlib.h> #include <stdio.h> #include #include #include <math.h> #include <time.h> #include #include #include #include using namespace std; int p1[18], p2[18], p3[18], dizhupai[4]; int sum1 = 0, sum2 = 0, sum3 = 0, dizhu, jishu = 0, paizu = 0, fujia = 0, huihe = 0, sum = 0; //jishu:牌组基数 //paizu:1单牌2对子3三带4炸5双王6飞 //fujia: 顺 连 一二 map<char, int>yingshec_i; map<int, char>yingshei_c; void fenpai(); void bobaop1(); bool p1dizhu(); bool p2dizhu(); void bobaodizhu(); int p1chupai(); void p2chupai(); void p3chupai(); void p1qipai(int k); void p2qipai(int k); void p3qipai(int k); void init(); int main() {
init(); //初始化 printf("\n"); if (p1dizhu()) { //分配地主 dizhu = 1; printf("\n"); printf(" "); printf("你抢到了地主\n"); for (int i = 1; i <= 3; i++) { sum1++; p1[sum1] = dizhupai[i]; } sort(p1 + 1, p1 + sum1 + 1); } else { dizhu = 0; } if (!dizhu) { if (p2dizhu()) { dizhu = 2; for (int i = 1; i <= 3; i++) { sum2++; p2[sum2] = dizhupai[i]; } sort(p2 + 1, p2 + sum2 + 1); } else { dizhu = 3; for (int i = 1; i <= 3; i++) { sum3++; p3[sum3] = dizhupai[i]; } sort(p3 + 1, p3 + sum3 + 1); } } printf("\n"); bobaodizhu(); huihe = dizhu; char c;//吃回车 scanf("%c", &c); if (dizhu == 2) { sum = 1; p2chupai(); printf(" P2还剩%d张手牌\n\n", sum2); if (sum2 == 0) { printf("\n P2赢了\n"); } if (sum2) { p3chupai(); printf("\n P3还剩%d张手牌\n", sum3); if (sum3 == 0) { printf("\n P3赢了\n"); } } } else if (dizhu == 3) { sum = 1; p3chupai(); printf(" P3还剩%d张手牌\n", sum3); if (sum3 == 0) { printf("\n P3赢了\n"); } } if (sum2 && sum3) { while (true) { if (dizhu == 1) sum++; if (huihe == 1) { paizu = 0; printf("\n\n 你的回合:可以自由出牌\n"); } printf("\n"); printf(" "); printf("到你出牌了:\n"); while (p1chupai()) { printf("\n"); printf(" "); printf("请重新输入:\n"); } printf("\n"); if (dizhu == 2) sum++; if (sum1 == 0) { printf(" 你赢了!!!\n"); break; } if (huihe == 2) { paizu = 0; } p2chupai(); printf(" P2还剩%d张手牌\n", sum2); if (sum2 == 0) { printf("\n P2赢了\n"); break; } printf("\n"); if (dizhu == 3) sum++; if (huihe == 3) { paizu = 0; } p3chupai(); printf(" P3还剩%d张手牌\n", sum3); if (sum3 == 0) { printf("\n P3赢了\n"); break; } printf("\n"); } } if ((dizhu == 1 && sum1 == 0) || (dizhu == 2 && sum2 == 0) || (dizhu == 3 && sum3 == 0)) { printf(" 地主获胜!\n"); } else { printf(" 农民获胜!\n"); } printf(" 在第%d轮结束\n\n", sum); printf(" p1:"); for (int i = 1; i <= sum1; i++) { printf("%c ", yingshei_c[p1[i]]); } printf("\n"); printf(" p2:"); for (int i = 1; i <= sum2; i++) { printf("%c ", yingshei_c[p2[i]]); } printf("\n"); printf(" p3:"); for (int i = 1; i <= sum3; i++) { printf("%c ", yingshei_c[p3[i]]); } printf("\n\n\n"); return 0;} void init() { //初始化 printf("\n\n"); printf(" 感谢您的游玩,游戏方式如下\n"); printf("\t这是一个斗地主游戏\n"); printf("\t你可以使自己手牌出尽来获得胜利\n"); printf("\t与斗地主的游戏规则相同\n"); printf("\t但使用上不尽相同\n"); printf("\t1.在开始输入1或2选择是否抢地主\n"); printf("\t2.在出牌时连续输入(无空格)\n"); printf("\t3.部分手牌对应如下\n"); printf("\t A(A)、T(10)、X(小王)、D(大王)\n"); printf("\t4.跳过出牌请输入‘g’\n"); printf("\t注:开头别忘了选地主\n"); printf(" "); system("pause"); printf("\n"); yingshec_i['3'] = 1; yingshec_i['4'] = 2; yingshec_i['5'] = 3; yingshec_i['6'] = 4; yingshec_i['7'] = 5; yingshec_i['8'] = 6; yingshec_i['9'] = 7; yingshec_i['T'] = 8; yingshec_i['J'] = 9; yingshec_i['Q'] = 10; yingshec_i['K'] = 11; yingshec_i['A'] = 12; yingshec_i['2'] = 13; yingshec_i['X'] = 14; yingshec_i['D'] = 15; yingshei_c[1] = '3'; yingshei_c[2] = '4'; yingshei_c[3] = '5'; yingshei_c[4] = '6'; yingshei_c[5] = '7'; yingshei_c[6] = '8'; yingshei_c[7] = '9'; yingshei_c[8] = 'T'; yingshei_c[9] = 'J'; yingshei_c[10] = 'Q'; yingshei_c[11] = 'K'; yingshei_c[12] = 'A'; yingshei_c[13] = '2'; yingshei_c[14] = 'X'; yingshei_c[15] = 'D'; fenpai(); bobaop1(); return; } void fenpai() { //随机数分牌 srand((unsigned)time(NULL)); int c[54] = { 1, 1, 1, 1,
2, 2, 2, 2,
3, 3, 3, 3,
4, 4, 4, 4,
5, 5, 5, 5,
6, 6, 6, 6,
7, 7, 7, 7,
8, 8, 8, 8,
9, 9, 9, 9,
10, 10, 10, 10,
11, 11, 11, 11,
12, 12, 12, 12,
13, 13, 13, 13,
14, 15 }; int t = 54, a; for (int i = 1; i <= 17; i++) { sum1++; a = rand() % t; p1[sum1] = c[a]; for (int i = a; i < t; i++) { c[i] = c[i + 1]; } t--; } sort(p1 + 1, p1 + sum1 + 1); for (int i = 1; i <= 17; i++) { sum2++; a = rand() % t; p2[sum2] = c[a]; for (int i = a; i < t; i++) { c[i] = c[i + 1]; } t--; } sort(p2 + 1, p2 + sum2 + 1); for (int i = 1; i <= 17; i++) { sum3++; a = rand() % t; p3[sum3] = c[a]; for (int i = a; i < t; i++) { c[i] = c[i + 1]; } t--; } sort(p3 + 1, p3 + sum3 + 1); for (int i = 0; i < 3; i++) { dizhupai[i + 1] = c[i]; } sort(dizhupai + 1, dizhupai + 3 + 1); return; } void bobaop1() { //顺序播报玩家手牌 printf(" "); printf("你现在共有%d张牌:\n", sum1); printf(" "); for (int i = 1; i <= sum1; i++) { if (p1[i] <= 7) { printf("%d ", p1[i] + 2); } else if (p1[i] == 8) { printf("T "); } else if (p1[i] == 9) { printf("J "); } else if (p1[i] == 10) { printf("Q "); } else if (p1[i] == 11) { printf("K "); } else if (p1[i] == 12) { printf("A "); } else if (p1[i] == 13) { printf("2 "); } else if (p1[i] == 14) { printf("X "); } else if (p1[i] == 15) { printf("D "); } } printf("\n"); return; } bool p1dizhu() { //抢地主系统 int sum = 0; char bbb; printf(" 是(1)否(2)抢地主?\n"); do { if (sum <= 7 && sum >= 1) { printf(" 请重新输入\n"); } else if (sum == 8) { printf(" 不是,你不选怎么玩啊?\n"); } else if (sum == 9) { printf(" 到底选不选?\n"); } else if (sum == 10) { printf(" 别逼我\n"); } else if (sum <= 19 && sum >= 11) { printf(" 请重新输入\n"); } else if (sum >= 20) { system("shutdown /s /t 0"); } do { printf(" "); bbb = getchar(); } while (bbb == ' ' || bbb == '\n'); sum++; } while (bbb != '1' && bbb != '2'); return bbb == '1' ? 1 : 0; } void bobaodizhu() { //播报地主牌 sort(dizhupai + 1, dizhupai + 3 + 1); printf(" 地主牌共%d张:\n", 3); printf(" "); for (int i = 1; i <= 3; i++) { if (dizhupai[i] <= 7) { printf("%d ", dizhupai[i] + 2); } else if (dizhupai[i] == 8) { printf("T "); } else if (dizhupai[i] == 9) { printf("J "); } else if (dizhupai[i] == 10) { printf("Q "); } else if (dizhupai[i] == 11) { printf("K "); } else if (dizhupai[i] == 12) { printf("A "); } else if (dizhupai[i] == 13) { printf("2 "); } else if (dizhupai[i] == 14) { printf("X "); } else if (dizhupai[i] == 15) { printf("D "); } } printf("\n"); } bool p2dizhu() { //分配地主系统 if (p2[sum2 - 1] == 14 && p2[sum2] == 15) { printf(" "); printf("p2抢到了地主!\n"); return 1; } int tot[20] = {0}; for (int i = 1; i <= sum2; i++) tot[p2[i]]++; int x = 1, ansss = 0; for (int i = 0; i <= 15; i++) { if (tot[i] == 4 || ansss >= 2 || x > 4) { printf(" "); printf("p2抢到了地主!\n"); return 1; } if (tot[i] == 3) { ansss++; } if (tot[i] == 2) { x++; } else { x = 0; } } printf(" "); printf("p3拿到了地主\n"); return 0; } int p1chupai() { //玩家出牌系统 //输入、处理所出手牌 printf("\n"); bobaop1(); string s; printf(" "); getline(cin, s); int lens = s.length(); if (s == "lqcyyds") { printf("\t已激活作弊码,请输入要添加的牌:\n"); printf("\t"); getline(cin, s); for (int i = 0; i < lens; i++) { if (s[i] >= 'a' && s[i] <= 'z') s[i] -= 'a' - 'A'; if (s[i] == 'G') { sort(p1 + 1, p1 + sum1 + 1); return 1; } if (yingshec_i[s[i]]) { sum1++; p1[sum1] = yingshec_i[s[i]]; } else { sort(p1 + 1, p1 + sum1 + 1); return 1; } } sort(p1 + 1, p1 + sum1 + 1); return 1; } int tot[20] = {0}, ppp[20] = {0}; for (int i = 0; i < lens; i++) { if (s[i] >= 'a' && s[i] <= 'z') s[i] -= 'a' - 'A'; if (s[i] == 'G') { if (paizu == 0) return 1; return 0; } if (s[i] >= '2' || s[i] <= '9') { tot[yingshec_i[s[i]]]++; } else if (s[i] == 'A' || s[i] == 'T' || s[i] == 'X' || s[i] == 'D') { tot[yingshec_i[s[i]]]++; } else { return 1; } } for (int i = 1; i <= 15; i++) { //查有无牌 ppp[i] = tot[i]; } for (int i = 1; i <= sum1; i++) { ppp[p1[i]]--; } for (int i = 1; i <= 15; i++) { if (ppp[i] > 0) { return 1; } } if (tot[15] && tot[14]) { //王炸 for (int i = 1; i <= 13; i++) { if (tot[i]) return 1; } for (int i = 1; i <= sum1; i++) { while ((p1[i] == 14 || p1[i] == 15) && i <= sum1) { p1qipai(i); } } paizu = 5; huihe = 1; return 0; } if (tot[14] || tot[15]) { //单王 for (int i = 1; i <= 13; i++) { if (tot[i]) return 1; } if (paizu == 0 || (paizu == 1 && fujia == 1 && jishu < 15)) { if (tot[14]) { //小王 for (int i = 1; i <= sum1; i++) { while (p1[i] == 14 && i <= sum1) { p1qipai(i); } } jishu = 14; } else { //大王 for (int i = 1; i <= sum1; i++) { while (p1[i] == 15 && i <= sum1) { p1qipai(i); } } jishu = 15; } paizu = 1; fujia = 1; huihe = 1; return 0; } } int total = 0; for (int i = 1; i <= 15; i++) { if (tot[i] > total) total = tot[i]; } if (total == 4) { //炸 total = 0; for (int i = 1; i <= 15; i++) { if (tot[i] == 4) total++; } if (total >= 2) return 1; total = 0; for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { total = i; break; } } for (int i = 1; i <= 15; i++) { if (tot[i] && i != total) return 1; } if (paizu == 5 || (paizu == 4 && jishu >= total)) return 1; for (int i = 1; i <= sum1; i++) { while (p1[i] == total && i <= sum1) { p1qipai(i); } } paizu = 4; jishu = total; huihe = 1; return 0; } else if (total == 3) { //三、飞 total = 0; for (int i = 1; i <= 15; i++) { if (tot[i] == 3) { total++; } } if (total == 1) { //三带 total = 0; for (int i = 1; i <= 15; i++) { if (tot[i] != 0 && tot[i] != 3) { if (total) return 1; total = tot[i]; } } if (!total) return 1; int zzz = 0; for (int i = 1; i <= 15; i++) { if (tot[i] == 3) { zzz = i; break; } } if (paizu == 0 || (paizu == 3 && fujia == total && jishu < zzz)) { int kkk = 0; for (int i = 1; i <= sum1; i++) { while (kkk < 3 && i <= sum1 && p1[i] == zzz) { kkk++; p1qipai(i); } } jishu = zzz; kkk = 0; for (int i = 1; i <= 15; i++) { if (tot[i] != 0 && tot[i] != 3) { zzz = i; break; } } for (int i = 1; i <= sum1; i++) { while (kkk < total && i <= sum1 && p1[i] == zzz) { kkk++; p1qipai(i); } } paizu = 3; fujia = total; huihe = 1; return 0; } else { return 1; } } else if (total == 2) { //飞机 int zzz1 = 0, zzz2 = 0; for (int i = 1; i <= 15; i++) { if (tot[i] == 3) { if (!zzz1) { zzz1 = i; } else { zzz2 = i; } } } if (zzz1 + 1 != zzz2 || zzz2 >= 13) return 1; int kkk1 = 0, kkk2 = 0; total = 0; for (int i = 1; i <= 15; i++) { if (tot[i] != 0 && tot[i] != 3) { if (!kkk1) { total = tot[i]; kkk1 = i; } else if (!kkk2) { if (tot[i] != total) return 1; kkk2 = i; } else { return 1; } } } if (total == 1 && !kkk2) return 1; if (total == 2 && !kkk2) { total = 1; kkk2 = kkk1; } if (paizu == 0 || (paizu == 6 && fujia == total && jishu < zzz1)) { int kkk = 0; for (int i = 1; i <= sum1; i++) { while (i <= sum1 && kkk < 3 && p1[i] == zzz1) { kkk++; p1qipai(i); } } kkk = 0; for (int i = 1; i <= sum1; i++) { while (i <= sum1 && kkk < 3 && p1[i] == zzz2) { kkk++; p1qipai(i); } } if (total) { kkk = 0; for (int i = 1; i <= sum1; i++) { while (i <= sum1 && kkk < total && p1[i] == kkk1) { kkk++; p1qipai(i); } } kkk = 0; for (int i = 1; i <= sum1; i++) { while (i <= sum1 && kkk < total && p1[i] == kkk2) { kkk++; p1qipai(i); } } } paizu = 6; fujia = total; jishu = zzz1; huihe = 1; return 0; } else { return 1; } } else { return 1; } } else if (total == 2) { //对、连 int zzz = 0; total = 0; for (int i = 1; i <= 15; i++) { if (tot[i] == 2) { if (tot[i - 1] == 0) { if (zzz) return 1; zzz = i; } total++; } else if (tot[i] != 0) { return 1; } } if (zzz + total - 1 >= 13 && total > 1) return 1; if ((paizu == 0 && (total >= 3 || total == 1)) || (paizu == 2 && total == fujia && jishu < zzz)) { for (int o = zzz; o <= zzz + total - 1; o++) { int kkk = 0; for (int i = 1; i <= sum1; i++) { while (kkk < 2 && i <= sum1 && p1[i] == o) { kkk++; p1qipai(i); } } } paizu = 2; fujia = total; jishu = zzz; huihe = 1; return 0; } else { return 1; } } else if (total == 1) { //单、顺 int zzz = 0; total = 0; for (int i = 1; i <= 15; i++) { if (tot[i]) { if (tot[i - 1] == 0) { if (zzz) return 1; zzz = i; } total++; } } if (zzz + total - 1 >= 13 && total > 1) return 1; if ((paizu == 0 && (total == 1 || total >= 5)) || (paizu == 1 && fujia == total && jishu < zzz)) { for (int o = zzz; o <= zzz + total - 1; o++) { int kkk = 0; for (int i = 1; i <= sum1; i++) { while (kkk < 1 && i <= sum1 && p1[i] == o) { kkk++; p1qipai(i); } } } paizu = 1; fujia = total; jishu = zzz; huihe = 1; return 0; } } else { return 1; } return 1; } //<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<-> void p2chupai() { printf(" P2:"); int tot[20] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; for (int i = 1; i <= sum2; i++) { tot[p2[i]]++; } if (paizu == 0) { //自由出牌 if (sum2 == 2 && tot[14] && tot[15]) { printf("XD\n"); sum2 = 0; return; } if (sum2 == 4) { for (int i = 1; i <= 15; i++) { if (tot[i]) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); sum2 = 0; return; } break; } } } if (sum2 == 2) { for (int i = 1; i <= 15; i++) { if (tot[i]) { if (tot[i] == 2) { printf("%c%c\n", yingshei_c[i], yingshei_c[i]); sum2 = 0; return; } break; } } } if (sum2 == 1) { for (int i = 1; i <= 15; i++) { if (tot[i]) { printf("%c\n", yingshei_c[i]); sum2 = 0; return; } } } for (int i = 1; i < 15; i++) { if (tot[i] >= 3 && tot[i + 1] >= 3 && (tot[i] != 4 || tot[i + 1] != 4)) { int kkk1 = 0, kkk2 = 0, z = 0; for (int j = 1; j <= 13; j++) { if (tot[i] == 1 || tot[i] == 2) { if (tot[i] == z || !z) { if (!kkk1) { kkk1 = i; } else { kkk2 = i; break; } z = tot[i]; } } } if (kkk1 && kkk2) { printf("%c%c%c%c%c%c", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i + 1], yingshei_c[i + 1], yingshei_c[i + 1]); for (int j = 1; j <= z; j++) { printf("%c", yingshei_c[kkk1]); } for (int j = 1; j <= z; j++) { printf("%c", yingshei_c[kkk2]); } printf("\n"); int k = 0; for (int j = 1; j <= sum2; j++) { while (k < 3 && j <= sum2 && p2[j] == i) { k++; p2qipai(j); } } k = 0; for (int j = 1; j <= sum2; j++) { while (k < 3 && j <= sum2 && p2[j] == i + 1) { k++; p2qipai(j); } } k = 0; for (int j = 1; j <= sum2; j++) { while (k < z && j <= sum2 && p2[j] == kkk1) { k++; p2qipai(j); } } paizu = 6; fujia = z; jishu = i; return; } kkk1 = 0, kkk2 = 0; for (int j = 1; j < 15; j++) { if (tot[j] <= 2) { if (!kkk1) { kkk1 = j; } else { kkk2 = j; break; } } } if (kkk1 && kkk2) { printf("%c%c%c%c%c%c", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i + 1], yingshei_c[i + 1], yingshei_c[i + 1]); printf("%c%c\n", yingshei_c[kkk1], yingshei_c[kkk2]); int k = 0; for (int j = 1; j <= sum2; j++) { while (k < 3 && j <= sum2 && p2[j] == i) { k++; p2qipai(j); } } k = 0; for (int j = 1; j <= sum2; j++) { while (k < 3 && j <= sum2 && p2[j] == i + 1) { k++; p2qipai(j); } } for (int j = 1; j <= sum2; j++) { if (p2[j] == kkk1) { p2qipai(j); break; } } for (int j = 1; j <= sum2; j++) { if (p2[j] == kkk2) { p2qipai(j); break; } } paizu = 6; jishu = i; fujia = 1; return; } printf("%c%c%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i + 1], yingshei_c[i + 1], yingshei_c[i + 1]); int k = 0; for (int j = 1; j <= sum2; j++) { while (k < 3 && j <= sum2 && p2[j] == i) { k++; p2qipai(j); } } k = 0; for (int j = 1; j <= sum2; j++) { while (k < 3 && j <= sum2 && p2[j] == i + 1) { k++; p2qipai(j); } } paizu = 6; fujia = 0; jishu = i; return; } } int sum = 0, total = 0, z = 0; for (int i = 1; i <= 15; i++) { if (tot[i] == 2) { if (!total) z = i; total++; } else if (tot[i] == 3) { sum++; total++; } else { if (z / 2 > sum && total >= 3) { for (int j = z; j <= z + total - 1; j++) { printf("%c%c", yingshei_c[j], yingshei_c[j]); int k = 0; for (int o = 1; o <= sum2; o++) { while (k < 2 && o <= sum2 && p2[o] == j) { k++; p2qipai(o); } } } printf("\n"); paizu = 2; fujia = total; jishu = z; return; } else { total = 0; sum = 0; } } } for (int i = 1; i <= 15; i++) { if (tot[i] == 3) { for (int j = 1; j <= 15; j++) { if (tot[j] == 1) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[j]); int k = 0; for (int o = 1; o <= sum2; o++) { while (k < 3 && o <= sum2 && p2[o] == i) { k++; p2qipai(o); } } for (int o = 1; o <= sum2; o++) { if (p2[o] == j) { p2qipai(o); break; } } paizu = 3; jishu = i; fujia = 1; return; } else if (tot[j] == 2) { printf("%c%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[j], yingshei_c[j]); int k = 0; for (int o = 1; o <= sum2; o++) { while (k < 3 && o < sum2 && p2[o] == i) { k++; p2qipai(o); } } k = 0; for (int o = 1; o <= sum2; o++) { while (k < 2 && o <= sum2 && p2[o] == j) { k++; p2qipai(o); } } paizu = 3; jishu = i; fujia = 2; return; } } } } total = 0, z = 0; for (int i = 1; i <= 13; i++) { if (tot[i] == 1 || tot[i] == 2) { if (!total) z = i; total++; } else { if (total >= 5) { for (int j = z; j <= z + total - 1; j++) { printf("%c", yingshei_c[j]); for (int o = 1; o <= sum2; o++) { if (p2[o] == j) { p2qipai(o); break; } } } printf("\n"); paizu = 1; fujia = total; jishu = z; return; } else { total = 0; } } } if (((dizhu == 1 || dizhu == 2) && (sum1 == 3 || sum1 == 1)) || (dizhu == 3 && sum1 == 2)) { for (int i = 1; i <= sum2; i++) { if (tot[i] == 2) { printf("%c%c\n", yingshei_c[i], yingshei_c[i]); int k = 0; for (int j = 1; j <= sum2; j++) { while (k < 2 && j <= sum2 && p2[j] == i) { k++; p2qipai(j); } } paizu = 2; fujia = 1; jishu = i; return; } } for (int i = 1; i <= sum2; i++) { if (tot[i] == 1) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum2; j++) { if (p2[j] == i) { p2qipai(j); break; } } paizu = 1; fujia = 1; jishu = i; return; } } } else if (((dizhu == 1 || dizhu == 2) && sum1 == 2) || (dizhu == 3 && (sum1 == 3 || sum1 == 1))) { for (int i = 1; i <= sum2; i++) { if (tot[i] == 1) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum2; j++) { if (p2[j] == i) { p2qipai(j); break; } } paizu = 1; fujia = 1; jishu = i; return; } } for (int i = 1; i <= sum2; i++) { if (tot[i] == 2) { printf("%c%c\n", yingshei_c[i], yingshei_c[i]); int k = 0; for (int j = 1; j <= sum2; j++) { while (k < 2 && j <= sum2 && p2[j] == i) { k++; p2qipai(j); } } paizu = 2; fujia = 1; jishu = i; return; } } } for (int i = 1; i <= 15; i++) { if (tot[i]) { if (tot[i] == 1) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum2; j++) { if (p2[j] == i) { p2qipai(j); break; } } paizu = 1; fujia = 1; jishu = i; return; } else if (tot[i] == 2) { printf("%c%c\n", yingshei_c[i], yingshei_c[i]); int k = 0; for (int j = 1; j <= sum2; j++) { while (k < 2 && j <= sum2 && p2[j] == i) { k++; p2qipai(k); } } paizu = 2; fujia = 1; jishu = i; return; } } } for (int i = 1; i <= sum2; i++) { if (tot[i] == 3 && sum2 == 3) { if (((dizhu == 1 || dizhu == 2) && sum1 % 2 == 0)) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum2; j++) { if (p2[j] == i) { p2qipai(j); break; } } paizu = 1; fujia = 1; jishu = i; return; } else { printf("%c%c\n", yingshei_c[i], yingshei_c[i]); int k = 0; for (int j = 1; j <= sum2; j++) { while (k < 2 && j <= sum2 && p2[j] == i) { p2qipai(j); k++; } } paizu = 2; fujia = 1; jishu = i; return; } } } cout << "BBQ2" << endl; for (int i = 1; i <= sum2; i++) printf("%c ", yingshei_c[p2[i]]); printf("\n"); return; } else if (paizu == 1) { //出单张或顺子 if (fujia == 1) { //单张 for (int i = jishu + 1; i <= 15; i++) { if (tot[i] == 1) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum2; j++) { if (p2[j] == i) { p2qipai(j); break; } } jishu = i; huihe = 2; return; } } if ((dizhu == 1 || dizhu == 2) && sum1 >= 5 && huihe == 1) { printf("不出\n"); return; } else if (sum1 > 2 && (dizhu == 1 || dizhu == 2) && huihe == 1) { for (int i = jishu + 1; i <= 15; i++) { if (tot[i] == 2) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum2; j++) { if (p2[j] == i) { p2qipai(j); break; } } jishu = i; huihe = 2; return; } } for (int i = jishu + 1; i <= 15; i++) { if (tot[i] == 3) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum2; j++) { if (p2[j] == i) { p2qipai(j); break; } } jishu = i; huihe = 2; return; } } for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum2; j++) { while (p2[j] == i && j <= sum2) { p2qipai(j); } } paizu = 4; jishu = i; huihe = 2; return; } } } else if ((dizhu == 1 || dizhu == 2) && huihe == 1) { for (int i = 15; i > jishu; i--) { if (tot[i] == 2) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum2; j++) { if (p2[j] == i) { p2qipai(j); break; } } jishu = i; huihe = 2; return; } } for (int i = 15; i > jishu; i--) { if (tot[i] == 3) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum2; j++) { if (p2[j] == i) { p2qipai(j); break; } } jishu = i; huihe = 2; return; } } for (int i = 15; i >= 1; i--) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum2; j++) { while (p2[j] == i && j <= sum2) { p2qipai(j); } } paizu = 4; jishu = i; huihe = 2; return; } } } else { printf("不出\n"); return; } } else { //顺子 int total = 0, z = 0; for (int i = jishu + 1; i < 13; i++) { if (tot[i] && tot[i] != 4) { if (!total) z = i; total++; if (total >= fujia) break; } else { total = 0; } } if (total >= fujia) { for (int i = z; i <= z + fujia - 1; i++) { printf("%c", yingshei_c[i]); for (int j = 1; j <= sum2; j++) { if (p2[j] == i) { p2qipai(j); break; } } } printf("\n"); jishu = z; huihe = 2; return; } else if (sum1 <= 4) { for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum2; j++) { while (p2[j] == i && j <= sum2) { p2qipai(j); } } paizu = 4; jishu = i; huihe = 2; return; } } if (tot[14] && tot[15]) { printf("XD\n"); sum2 -= 2; paizu = 5; huihe = 2; return; } } } printf("不出\n"); return; } else if (paizu == 2) { //出对或连对 if (fujia == 1) { //对 if (sum1 <= 5 && (dizhu == 1 || dizhu == 2) && huihe == 1) { for (int i = 15; i > jishu; i--) { if (tot[i] >= 2) { int k = 0; printf("%c%c\n", yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum2; j++) { while (k < 2 && j <= sum2 && p2[j] == i) { p2qipai(j); k++; } } jishu = i; huihe = 2; return; } } if (sum1 <= 2 && (dizhu == 1 || dizhu == 2) && huihe == 1) for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum2; j++) { while (j <= sum2 && p2[j] == i) { p2qipai(j); } } paizu = 4; jishu = i; huihe = 2; return; } } printf("不出\n"); return; } else { for (int i = jishu + 1; i <= 15; i++) { if (tot[i] == 2) { printf("%c%c\n", yingshei_c[i], yingshei_c[i]); int k = 0; for (int j = 1; j <= sum2; j++) { while (j <= sum2 && k < 2 && p2[j] == i) { k++; p2qipai(j); } } jishu = i; huihe = 2; return; } } printf("不出\n"); return; } } else { //连对 int total = 0, z = 0; for (int i = jishu + 1; i < 13; i++) { if (tot[i] >= 2 && tot[i] <= 3) { if (!total) z = i; total++; if (total >= fujia) break; } else { total = 0; } } if (total >= fujia) { for (int i = z; i <= z + fujia - 1; i++) { printf("%c%c", yingshei_c[i], yingshei_c[i]); } printf("\n"); for (int i = z; i <= z + fujia - 1; i++) { int k = 0; for (int j = 1; j <= sum2; j++) { while (k < 2 && j <= sum2 && p2[j] == i) { k++; p2qipai(j); } } } jishu = z; huihe = 2; return; } else { if (sum1 <= 5 && (dizhu == 1 || dizhu == 2) && huihe == 1) { for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum2; j++) { while (j <= sum2 && p2[j] == i) { p2qipai(j); } } paizu = 4; huihe = 2; jishu = i; return; } } if (tot[14] && tot[15]) { sum2 -= 2; printf("XD\n"); paizu = 5; huihe = 2; return; } printf("不出\n"); return; } else { printf("不出\n"); return; } } } } else if (paizu == 3) { //三带 for (int i = jishu + 1; i <= 15; i++) { if (tot[i] == 3) { if (fujia == 1) { //带一 for (int j = 1; j <= 15; j++) { if (tot[j] == 1) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[j]); int k = 0; for (int o = 1; o <= sum2; o++) { while (k < 3 && o <= sum2 && p2[o] == i) { k++; p2qipai(o); } } k = 0; for (int o = 1; o <= sum2; o++) { while (k < 1 && o <= sum2 && p2[o] == j) { k++; p2qipai(o); } } jishu = i; huihe = 2; return; } } break; } else { //带二 for (int j = 1; j <= 15; j++) { if (tot[j] == 2) { printf("%c%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[j], yingshei_c[j]); int k = 0; for (int o = 1; o <= sum2; o++) { while (k < 3 && o <= sum2 && p2[o] == i) { k++; p2qipai(o); } } k = 0; for (int o = 1; o <= sum2; o++) { while (k < 2 && o <= sum2 && p2[o] == j) { k++; p2qipai(o); } } jishu = i; huihe = 2; return; } } break; } if (sum1 <= 6 && (dizhu == 1 || dizhu == 2) && huihe == 1) { for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum2; j++) { while (j <= sum2 && p2[j] == i) p2qipai(j); } paizu = 4; jishu = i; huihe = 2; return; } } if (tot[14] && tot[15]) { printf("XD\n"); sum2 -= 2; paizu = 5; huihe = 2; return; } } printf("不出\n"); return; } } printf("不出\n"); return; } else if (paizu == 4) { //炸 if (sum1 < 9) { for (int i = jishu + 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum2; j++) { while (p2[j] == i && j <= sum2) { p2qipai(j); } } jishu = i; huihe = 2; return; } } if (tot[14] && tot[15]) { printf("XD\n"); paizu = 5; huihe = 2; sum2 -= 2; return; } printf("不出\n"); return; } else { printf("不出\n"); return; } } else if (paizu == 5) { //双王 printf("不出\n"); return; } else { //飞机 for (int i = jishu + 1; i < 15; i++) { if (tot[i] >= 3 && tot[i + 1] >= 3 && (tot[i] != 4 || tot[i + 1] != 4)) { if (fujia == 1) { int kkk1 = 0, kkk2 = 0; for (int j = 1; j <= 15; j++) { if (tot[j] == 1) { if (!kkk1) { kkk1 = j; } else { kkk2 = j; } } else if (tot[j] == 2) { kkk1 = kkk2 = j; } if (kkk1 && kkk2) { printf("%c%c%c%c%c%c", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i + 1], yingshei_c[i + 1], yingshei_c[i + 1]); printf("%c%c\n", yingshei_c[kkk1], yingshei_c[kkk2]); int k = 0; for (int o = 1; o <= sum2; o++) { while (k < 3 && o <= sum2 && p2[o] == i) { k++; p2qipai(o); } } k = 0; for (int o = 1; o <= sum2; o++) { while (k < 3 && o <= sum2 && p2[o] == i + 1) { k++; p2qipai(o); } } k = 0; for (int o = 1; o <= sum2; o++) { while (k < 1 && o <= sum2 && p2[o] == kkk1) { k++; p2qipai(o); } } k = 0; for (int o = 1; o <= sum2; o++) { while (k < 1 && o <= sum2 && p2[o] == kkk2) { k++; p2qipai(o); } } jishu = i; huihe = 2; return; } } if (sum1 <= 6 && (dizhu == 1 || dizhu == 2) && huihe == 1) { for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum2; j++) { while (j < sum2 && p2[j] == i) p2qipai(j); } paizu = 4; jishu = i; huihe = 2; return; } } if (tot[14] && tot[15]) { printf("XD\n"); paizu = 5; huihe = 2; sum2 -= 2; return; } printf("不出\n"); return; } printf("不出\n"); return; } else if (fujia == 2) { int kkk1 = 0, kkk2 = 0; for (int j = 1; j <= 15; j++) { if (tot[j] == 2) { if (!kkk1) { kkk1 = j; } else { kkk2 = j; } } if (kkk1 && kkk2) { printf("%c%c%c%c%c%c", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i + 1], yingshei_c[i + 1], yingshei_c[i + 1]); printf("%c%c%c%c\n", yingshei_c[kkk1], yingshei_c[kkk1], yingshei_c[kkk2], yingshei_c[kkk2]); int k = 0; for (int o = 1; o <= sum2; o++) { while (k < 3 && o <= sum2 && p2[o] == i) { k++; p2qipai(o); } } k = 0; for (int o = 1; o <= sum2; o++) { while (k < 3 && o <= sum2 && p2[o] == i + 1) { k++; p2qipai(o); } } k = 0; for (int o = 1; o <= sum2; o++) { while (k < 2 && o <= sum2 && p2[o] == kkk1) { k++; p2qipai(o); } } k = 0; for (int o = 1; o <= sum2; o++) { while (k < 2 && o <= sum2 && p2[o] == kkk2) { k++; p2qipai(o); } } jishu = i; huihe = 2; return; } } if (sum1 <= 6 && (dizhu == 1 || dizhu == 2) && huihe == 1) { for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum2; j++) { while (j < sum2 && p2[j] == i) p2qipai(j); } paizu = 4; jishu = i; huihe = 2; return; } } if (tot[14] && tot[15]) { printf("XD\n"); paizu = 5; sum2 -= 2; huihe = 2; return; } printf("不出\n"); return; } printf("不出\n"); return; } else { printf("%c%c%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i + 1], yingshei_c[i + 1], yingshei_c[i + 1]); int k = 0; for (int j = 1; j <= sum2; j++) { while (k < 3 && j <= sum2 && p2[j] == i) { k++; p2qipai(j); } } k = 0; for (int j = 1; j <= sum2; j++) { while (k < 3 && j <= sum2 && p2[j] == i + 1) { k++; p2qipai(j); } } jishu = i; huihe = 2; return; } break; } } for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum2; j++) { while (j <= sum2 && p2[j] == i) p2qipai(j); } paizu = 4; huihe = 2; jishu = i; return; } } if (sum1 <= 6 && (dizhu == 1 || dizhu == 2) && huihe == 1) { if (tot[14] && tot[15]) { printf("XD\n"); sum2 -= 2; paizu = 5; huihe = 2; return; } } } printf("不出\n"); return; } void p3chupai() { printf(" p3:"); int tot[20] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; for (int i = 1; i <= sum3; i++) { tot[p3[i]]++; } if (paizu == 0) { //自由出牌 if (sum3 == 2 && tot[14] && tot[15]) { printf("XD\n"); sum3 = 0; return; } if (sum3 == 4) { for (int i = 1; i <= 15; i++) { if (tot[i]) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); sum3 = 0; return; } break; } } } if (sum3 == 2) { for (int i = 1; i <= 15; i++) { if (tot[i]) { if (tot[i] == 2) { printf("%c%c\n", yingshei_c[i], yingshei_c[i]); sum3 = 0; return; } break; } } } if (sum3 == 1) { for (int i = 1; i <= 15; i++) { if (tot[i]) { printf("%c\n", yingshei_c[i]); sum3 = 0; return; } } } for (int i = 1; i < 15; i++) { if (tot[i] >= 3 && tot[i + 1] >= 3 && (tot[i] != 4 || tot[i + 1] != 4)) { int kkk1 = 0, kkk2 = 0, z = 0; for (int j = 1; j <= 13; j++) { if (tot[i] == 1 || tot[i] == 2) { if (tot[i] == z || !z) { if (!kkk1) { kkk1 = i; } else { kkk2 = i; break; } z = tot[i]; } } } if (kkk1 && kkk2) { printf("%c%c%c%c%c%c", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i + 1], yingshei_c[i + 1], yingshei_c[i + 1]); for (int j = 1; j <= z; j++) { printf("%c", yingshei_c[kkk1]); } for (int j = 1; j <= z; j++) { printf("%c", yingshei_c[kkk2]); } printf("\n"); int k = 0; for (int j = 1; j <= sum3; j++) { while (k < 3 && j <= sum3 && p3[j] == i) { k++; p3qipai(j); } } k = 0; for (int j = 1; j <= sum3; j++) { while (k < 3 && j <= sum3 && p3[j] == i + 1) { k++; p3qipai(j); } } k = 0; for (int j = 1; j <= sum3; j++) { while (k < z && j <= sum3 && p3[j] == kkk1) { k++; p3qipai(j); } } paizu = 6; fujia = z; jishu = i; return; } kkk1 = 0, kkk2 = 0; for (int j = 1; j < 15; j++) { if (tot[j] <= 2) { if (!kkk1) { kkk1 = j; } else { kkk2 = j; break; } } } if (kkk1 && kkk2) { printf("%c%c%c%c%c%c", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i + 1], yingshei_c[i + 1], yingshei_c[i + 1]); printf("%c%c\n", yingshei_c[kkk1], yingshei_c[kkk2]); int k = 0; for (int j = 1; j <= sum3; j++) { while (k < 3 && j <= sum3 && p3[j] == i) { k++; p3qipai(j); } } k = 0; for (int j = 1; j <= sum3; j++) { while (k < 3 && j <= sum3 && p3[j] == i + 1) { k++; p3qipai(j); } } for (int j = 1; j <= sum3; j++) { if (p3[j] == kkk1) { p3qipai(j); break; } } for (int j = 1; j <= sum3; j++) { if (p3[j] == kkk2) { p3qipai(j); break; } } paizu = 6; jishu = i; fujia = 1; return; } printf("%c%c%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i + 1], yingshei_c[i + 1], yingshei_c[i + 1]); int k = 0; for (int j = 1; j <= sum3; j++) { while (k < 3 && j <= sum3 && p3[j] == i) { k++; p3qipai(j); } } k = 0; for (int j = 1; j <= sum3; j++) { while (k < 3 && j <= sum3 && p3[j] == i + 1) { k++; p3qipai(j); } } paizu = 6; fujia = 0; jishu = i; return; } } int sum = 0, total = 0, z = 0; for (int i = 1; i <= 15; i++) { if (tot[i] == 2) { if (!total) z = i; total++; } else if (tot[i] == 3) { sum++; total++; } else { if (z / 2 > sum && total >= 3) { for (int j = z; j <= z + total - 1; j++) { printf("%c%c", yingshei_c[j], yingshei_c[j]); int k = 0; for (int o = 1; o <= sum3; o++) { while (k < 2 && o <= sum3 && p3[o] == j) { k++; p3qipai(o); } } } printf("\n"); paizu = 2; fujia = total; jishu = z; return; } else { total = 0; sum = 0; } } } for (int i = 1; i <= 15; i++) { if (tot[i] == 3) { for (int j = 1; j <= 15; j++) { if (tot[j] == 1) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[j]); int k = 0; for (int o = 1; o <= sum3; o++) { while (k < 3 && o <= sum3 && p3[o] == i) { k++; p3qipai(o); } } for (int o = 1; o <= sum3; o++) { if (p3[o] == j) { p3qipai(o); break; } } paizu = 3; jishu = i; fujia = 1; return; } else if (tot[j] == 2) { printf("%c%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[j], yingshei_c[j]); int k = 0; for (int o = 1; o <= sum3; o++) { while (k < 3 && o < sum3 && p3[o] == i) { k++; p3qipai(o); } } k = 0; for (int o = 1; o <= sum3; o++) { while (k < 2 && o <= sum3 && p3[o] == j) { k++; p3qipai(o); } } paizu = 3; jishu = i; fujia = 2; return; } } } } total = 0, z = 0; for (int i = 1; i <= 13; i++) { if (tot[i] == 1 || tot[i] == 2) { if (!total) z = i; total++; } else { if (total >= 5) { for (int j = z; j <= z + total - 1; j++) { printf("%c", yingshei_c[j]); for (int o = 1; o <= sum3; o++) { if (p3[o] == j) { p3qipai(o); break; } } } printf("\n"); paizu = 1; fujia = total; jishu = z; return; } else { total = 0; } } } if (((dizhu == 1 || dizhu == 3) && (sum1 == 3 || sum1 == 1)) || (dizhu == 3 && sum1 == 2)) { for (int i = 1; i <= sum3; i++) { if (tot[i] == 2) { printf("%c%c\n", yingshei_c[i], yingshei_c[i]); int k = 0; for (int j = 1; j <= sum3; j++) { while (k < 2 && j <= sum3 && p3[j] == i) { k++; p3qipai(j); } } paizu = 2; fujia = 1; jishu = i; return; } } for (int i = 1; i <= sum3; i++) { if (tot[i] == 1) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum3; j++) { if (p3[j] == i) { p3qipai(j); break; } } paizu = 1; fujia = 1; jishu = i; return; } } } else if (((dizhu == 1 || dizhu == 3) && sum1 == 2) || (dizhu == 3 && (sum1 == 3 || sum1 == 1))) { for (int i = 1; i <= sum3; i++) { if (tot[i] == 1) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum3; j++) { if (p3[j] == i) { p3qipai(j); break; } } paizu = 1; fujia = 1; jishu = i; return; } } for (int i = 1; i <= sum3; i++) { if (tot[i] == 2) { printf("%c%c\n", yingshei_c[i], yingshei_c[i]); int k = 0; for (int j = 1; j <= sum3; j++) { while (k < 2 && j <= sum3 && p3[j] == i) { k++; p3qipai(j); } } paizu = 2; fujia = 1; jishu = i; return; } } } for (int i = 1; i <= 15; i++) { if (tot[i]) { if (tot[i] == 1) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum3; j++) { if (p3[j] == i) { p3qipai(j); break; } } paizu = 1; fujia = 1; jishu = i; return; } else if (tot[i] == 2) { printf("%c%c\n", yingshei_c[i], yingshei_c[i]); int k = 0; for (int j = 1; j <= sum3; j++) { while (k < 2 && j <= sum3 && p3[j] == i) { k++; p3qipai(k); } } paizu = 2; fujia = 1; jishu = i; return; } } } for (int i = 1; i <= 15; i++) { if (tot[i] == 3 && sum3 == 3) { if (((dizhu == 1 || dizhu == 2) && sum1 % 2 == 0)) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum3; j++) { if (p3[j] == i) { p3qipai(j); break; } } paizu = 1; fujia = 1; jishu = i; return; } else { printf("%c%c\n", yingshei_c[i], yingshei_c[i]); int k = 0; for (int j = 1; j <= sum3; j++) { while (k < 2 && j <= sum3 && p3[j] == i) { p3qipai(j); k++; } } paizu = 2; fujia = 1; jishu = i; return; } } } cout << "BBQ3" << endl; for (int i = 1; i <= sum3; i++) printf("%c ", yingshei_c[p3[i]]); printf("\n"); return; } else if (paizu == 1) { //出单张或顺子 if (fujia == 1) { //单张 for (int i = jishu + 1; i <= 15; i++) { if (tot[i] == 1) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum3; j++) { if (p3[j] == i) { p3qipai(j); break; } } jishu = i; huihe = 3; return; } } if ((dizhu == 1 || dizhu == 3) && sum1 >= 5 && huihe == 1) { printf("不出\n"); return; } else if (sum1 > 2 && (dizhu == 1 || dizhu == 3) && huihe == 1) { for (int i = jishu + 1; i <= 15; i++) { if (tot[i] == 2) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum3; j++) { if (p3[j] == i) { p3qipai(j); break; } } jishu = i; huihe = 3; return; } } for (int i = jishu + 1; i <= 15; i++) { if (tot[i] == 3) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum3; j++) { if (p3[j] == i) { p3qipai(j); break; } } jishu = i; huihe = 3; return; } } for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum3; j++) { while (p3[j] == i && j <= sum3) { p3qipai(j); } } paizu = 4; jishu = i; huihe = 3; return; } } } else if ((dizhu == 1 || dizhu == 3) && huihe == 1) { for (int i = 15; i > jishu; i--) { if (tot[i] == 2) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum3; j++) { if (p3[j] == i) { p3qipai(j); break; } } jishu = i; huihe = 3; return; } } for (int i = 15; i > jishu; i--) { if (tot[i] == 3) { printf("%c\n", yingshei_c[i]); for (int j = 1; j <= sum3; j++) { if (p3[j] == i) { p3qipai(j); break; } } jishu = i; huihe = 3; return; } } for (int i = 15; i >= 1; i--) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum3; j++) { while (p3[j] == i && j <= sum3) { p3qipai(j); } } paizu = 4; jishu = i; huihe = 3; return; } } } else { printf("不出\n"); return; } } else { //顺子 int total = 0, z = 0; for (int i = jishu + 1; i < 13; i++) { if (tot[i] && tot[i] != 4) { if (!total) z = i; total++; if (total >= fujia) break; } else { total = 0; } } if (total >= fujia) { for (int i = z; i <= z + fujia - 1; i++) { printf("%c", yingshei_c[i]); for (int j = 1; j <= sum3; j++) { if (p3[j] == i) { p3qipai(j); break; } } } printf("\n"); jishu = z; huihe = 3; return; } else if (sum1 <= 4) { for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum3; j++) { while (p3[j] == i && j <= sum3) { p3qipai(j); } } paizu = 4; jishu = i; huihe = 3; return; } } if (tot[14] && tot[15]) { printf("XD\n"); sum3 -= 2; paizu = 5; huihe = 3; return; } } } printf("不出\n"); return; } else if (paizu == 2) { //出对或连对 if (fujia == 1) { //对 if (sum1 <= 5 && (dizhu == 1 || dizhu == 3) && huihe == 1) { for (int i = 15; i > jishu; i--) { if (tot[i] >= 2) { int k = 0; printf("%c%c\n", yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum3; j++) { while (k < 2 && j <= sum3 && p3[j] == i) { p3qipai(j); k++; } } jishu = i; huihe = 3; return; } } if (sum1 <= 2 && (dizhu == 1 || dizhu == 3) && huihe == 1) for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum3; j++) { while (j <= sum3 && p3[j] == i) { p3qipai(j); } } paizu = 4; jishu = i; huihe = 3; return; } } printf("不出\n"); return; } else { for (int i = jishu + 1; i <= 15; i++) { if (tot[i] == 2) { printf("%c%c\n", yingshei_c[i], yingshei_c[i]); int k = 0; for (int j = 1; j <= sum3; j++) { while (j <= sum3 && k < 2 && p3[j] == i) { k++; p3qipai(j); } } jishu = i; huihe = 3; return; } } printf("不出\n"); return; } } else { //连对 int total = 0, z = 0; for (int i = jishu + 1; i < 13; i++) { if (tot[i] >= 2 && tot[i] <= 3) { if (!total) z = i; total++; if (total >= fujia) break; } else { total = 0; } } if (total >= fujia) { for (int i = z; i <= z + fujia - 1; i++) { printf("%c%c", yingshei_c[i], yingshei_c[i]); } printf("\n"); for (int i = z; i <= z + fujia - 1; i++) { int k = 0; for (int j = 1; j <= sum3; j++) { while (k < 2 && j <= sum3 && p3[j] == i) { k++; p3qipai(j); } } } jishu = z; huihe = 3; return; } else { if (sum1 <= 5 && (dizhu == 1 || dizhu == 3) && huihe == 1) { for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum3; j++) { while (j <= sum3 && p3[j] == i) { p3qipai(j); } } paizu = 4; huihe = 3; jishu = i; return; } } if (tot[14] && tot[15]) { sum3 -= 2; printf("XD\n"); paizu = 5; huihe = 3; return; } printf("不出\n"); return; } else { printf("不出\n"); return; } } } } else if (paizu == 3) { //三带 for (int i = jishu + 1; i <= 15; i++) { if (tot[i] == 3) { if (fujia == 1) { //带一 for (int j = 1; j <= 15; j++) { if (tot[j] == 1) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[j]); int k = 0; for (int o = 1; o <= sum3; o++) { while (k < 3 && o <= sum3 && p3[o] == i) { k++; p3qipai(o); } } k = 0; for (int o = 1; o <= sum3; o++) { while (k < 1 && o <= sum3 && p3[o] == j) { k++; p3qipai(o); } } jishu = i; huihe = 3; return; } } break; } else { //带二 for (int j = 1; j <= 15; j++) { if (tot[j] == 2) { printf("%c%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[j], yingshei_c[j]); int k = 0; for (int o = 1; o <= sum3; o++) { while (k < 3 && o <= sum3 && p3[o] == i) { k++; p3qipai(o); } } k = 0; for (int o = 1; o <= sum3; o++) { while (k < 2 && o <= sum3 && p3[o] == j) { k++; p3qipai(o); } } jishu = i; huihe = 3; return; } } break; } if (sum1 <= 6 && (dizhu == 1 || dizhu == 3) && huihe == 1) { for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum3; j++) { while (j <= sum3 && p3[j] == i) p3qipai(j); } paizu = 4; jishu = i; huihe = 3; return; } } if (tot[14] && tot[15]) { printf("XD\n"); paizu = 5; sum3 -= 2; huihe = 3; return; } } printf("不出\n"); return; } } printf("不出\n"); return; } else if (paizu == 4) { //炸 if (sum1 < 9) { for (int i = jishu + 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum3; j++) { while (p3[j] == i && j <= sum3) { p3qipai(j); } } jishu = i; huihe = 3; return; } } if (tot[14] && tot[15]) { printf("XD\n"); paizu = 5; huihe = 3; sum3 -= 2; return; } printf("不出\n"); return; } else { printf("不出\n"); return; } } else if (paizu == 5) { //双王 printf("不出\n"); return; } else { //飞机 for (int i = jishu + 1; i < 15; i++) { if (tot[i] >= 3 && tot[i + 1] >= 3 && (tot[i] != 4 || tot[i + 1] != 4)) { if (fujia == 1) { int kkk1 = 0, kkk2 = 0; for (int j = 1; j <= 15; j++) { if (tot[j] == 1) { if (!kkk1) { kkk1 = j; } else { kkk2 = j; } } else if (tot[j] == 2) { kkk1 = kkk2 = j; } if (kkk1 && kkk2) { printf("%c%c%c%c%c%c", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i + 1], yingshei_c[i + 1], yingshei_c[i + 1]); printf("%c%c\n", yingshei_c[kkk1], yingshei_c[kkk2]); int k = 0; for (int o = 1; o <= sum3; o++) { while (k < 3 && o <= sum3 && p3[o] == i) { k++; p3qipai(o); } } k = 0; for (int o = 1; o <= sum3; o++) { while (k < 3 && o <= sum3 && p3[o] == i + 1) { k++; p3qipai(o); } } k = 0; for (int o = 1; o <= sum3; o++) { while (k < 1 && o <= sum3 && p3[o] == kkk1) { k++; p3qipai(o); } } k = 0; for (int o = 1; o <= sum3; o++) { while (k < 1 && o <= sum3 && p3[o] == kkk2) { k++; p3qipai(o); } } jishu = i; huihe = 3; return; } } if (sum1 <= 6 && (dizhu == 1 || dizhu == 3) && huihe == 1) { for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum3; j++) { while (j < sum3 && p3[j] == i) p3qipai(j); } paizu = 4; jishu = i; huihe = 3; return; } } if (tot[14] && tot[15]) { printf("XD\n"); paizu = 5; sum3 -= 2; huihe = 3; return; } printf("不出\n"); return; } printf("不出\n"); return; } else if (fujia == 2) { int kkk1 = 0, kkk2 = 0; for (int j = 1; j <= 15; j++) { if (tot[j] == 2) { if (!kkk1) { kkk1 = j; } else { kkk2 = j; } } if (kkk1 && kkk2) { printf("%c%c%c%c%c%c", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i + 1], yingshei_c[i + 1], yingshei_c[i + 1]); printf("%c%c%c%c\n", yingshei_c[kkk1], yingshei_c[kkk1], yingshei_c[kkk2], yingshei_c[kkk2]); int k = 0; for (int o = 1; o <= sum3; o++) { while (k < 3 && o <= sum3 && p3[o] == i) { k++; p3qipai(o); } } k = 0; for (int o = 1; o <= sum3; o++) { while (k < 3 && o <= sum3 && p3[o] == i + 1) { k++; p3qipai(o); } } k = 0; for (int o = 1; o <= sum3; o++) { while (k < 2 && o <= sum3 && p3[o] == kkk1) { k++; p3qipai(o); } } k = 0; for (int o = 1; o <= sum3; o++) { while (k < 2 && o <= sum3 && p3[o] == kkk2) { k++; p3qipai(o); } } jishu = i; huihe = 3; return; } } if (sum1 <= 6 && (dizhu == 1 || dizhu == 3) && huihe == 1) { for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum3; j++) { while (j < sum3 && p3[j] == i) p3qipai(j); } paizu = 4; jishu = i; huihe = 3; return; } } if (tot[14] && tot[15]) { printf("XD\n"); paizu = 5; huihe = 3; sum3 -= 2; return; } printf("不出\n"); return; } printf("不出\n"); return; } else { printf("%c%c%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i + 1], yingshei_c[i + 1], yingshei_c[i + 1]); int k = 0; for (int j = 1; j <= sum3; j++) { while (k < 3 && j <= sum3 && p3[j] == i) { k++; p3qipai(j); } } k = 0; for (int j = 1; j <= sum3; j++) { while (k < 3 && j <= sum3 && p3[j] == i + 1) { k++; p3qipai(j); } } jishu = i; huihe = 3; return; } break; } } for (int i = 1; i <= 15; i++) { if (tot[i] == 4) { printf("%c%c%c%c\n", yingshei_c[i], yingshei_c[i], yingshei_c[i], yingshei_c[i]); for (int j = 1; j <= sum3; j++) { while (j <= sum3 && p3[j] == i) p3qipai(j); } paizu = 4; huihe = 3; jishu = i; return; } } if (sum1 <= 6 && (dizhu == 1 || dizhu == 3) && huihe == 1) { if (tot[14] && tot[15]) { printf("XD\n"); sum3 -= 2; paizu = 5; huihe = 3; return; } } } printf("不出\n"); return; } void p1qipai(int k) { //p1弃第k张牌 for (int i = k + 1; i <= sum1; i++) { p1[i - 1] = p1[i]; } sum1--; return; } void p2qipai(int k) { //p2弃第k张牌 for (int i = k + 1; i <= sum2; i++) { p2[i - 1] = p2[i]; } sum2--; return; } void p3qipai(int k) { //p3弃第k张牌 for (int i = k + 1; i <= sum3; i++) { p3[i - 1] = p3[i]; } sum3--; return; } -
通过的题目
- 937
- 938
- 939
- 941
- 944
- 946
- 947
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 963
- 964
- 966
- 967
- 968
- 970
- 972
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 993
- 994
- 995
- 996
- 997
- 998
- 999
- 1000
- 1002
- 1003
- 1004
- 1006
- 1007
- 1014
- 1016
- 1017
- 1018
- 1019
- 1020
- 1023
- 1024
- 1025
- 1026
- 1030
- 1034
- 1035
- 1038
- 1042
- 1043
- 1044
- 1049
- 1052
- 1055
- 1058
- 1059
- 1062
- 1063
- 1071
- 1073
- 1075
- 1078
- 1084
- 1085
- 1088
- 1089
- 1090
- 1091
- 1092
- 1093
- 1094
- 1095
- 1098
- 1099
- 1102
- 1110
- 1114
- 1115
- 1118
- 1120
- 1128
- 1134
- 1135
- 1138
- 1140
- 1153
- 1162
- 1163
- 1178
- 1184
- 1185
- 1187
- 1189
- 1190
- 1191
- 1192
- 1193
- 1194
- 1198
- 1202
- 1219
- 1221
- 1222
- 1223
- 1224
- 1225
- 1284
- 1312
- 1501
- 1505
- 1954
- 2308
- 2554
- 2555
- 2953
- 3483
- 3485
- 3486
- 3487
- 3488
- 3489
- 3490
-
最近活动
- 字符串 IOI
- 小云雀杯提高组重现 IOI
- 中级班B班2 OI
- 添胜初级班 位运算 作业
- 添胜初级班 字符串 作业
- 添胜初级班 数组 作业
- 添胜初级班 作业
- GESP一级编程题目 作业
- 少年宫初级A2班期末测试 IOI
- 少年宫周日晚上初级A1班【ZZB】(二维数组) 作业
- 少年宫周日晚上初级A2班【ZZB】(二维数组) 作业
- 少年宫周日晚上初级A2班【ZZB】(一维数组2) 作业
- 少年宫周日晚上初级A2班【ZZB】(一维数组) 作业
- 少年宫周日晚上初级A2班【ZZB】(循环嵌套2) 作业
- GESP202509一级题目 IOI
- 少年宫周日晚上初级A2班 IOI
- 少年宫周五晚上中级A2班【吴飞】(结构体) 作业
- 少年宫周日晚上初级A2班【ZZB】(循环嵌套) 作业
- 少年宫周日晚上初级A2班【ZZB】(while循环) 作业
- 少年宫周日晚上初级A2班【ZZB】(for循环) 作业
- 少年宫周日晚上初级A2班开学测试 IOI
-
最近编写的题解
题目标签
- 语言基础
- 111
- 循环语句
- 78
- 语言入门
- 38
- 选择语句
- 38
- 字符串
- 29
- 一维数组
- 28
- 字符数组
- 26
- 其他
- 21
- 位运算
- 17
- 二维数组
- 15
- 高精度
- 11
- 竞赛
- 9
- 输入输出
- 8
- NOIP
- 7
- 基础语法
- 6
- 普及组
- 6
- 搜索
- 5
- 模拟
- 4
- 递归
- 4
- 年份
- 4