24点运算

转载 2017年10月06日 11:30:04
  1. #include <iostream>  
  2. #include <string>  
  3. #include <algorithm>  
  4.   
  5. using namespace std;  
  6.   
  7.   
  8. string poker[] = { "A""2""3""4""5""6""7""8""9""10""J""Q""K" };  
  9. char C[12] = { '+''+''+''-''-''-''*''*''*''/''/''/' };  
  10.   
  11. int Calculate(int a, int b, char c)  
  12. {  
  13.     switch (c){  
  14.         case '+'return a + b;  
  15.         case '-'return a - b;  
  16.         case '*'return a * b;  
  17.         case '/'return a / b;  
  18.         defaultreturn -1;  //不会有这个选项  
  19.     }  
  20. }  
  21.   
  22. int Caculate24(int a, int b, int c, int d, char C1, char C2, char C3)  
  23. {  
  24.     return Calculate(Calculate(Calculate(a, b, C1), c, C2), d, C3);  
  25. }  
  26.   
  27. bool Count24(int a, int b, int c, int d)  
  28. {  
  29.     sort(C, C + 12);  
  30.       
  31.     do {  
  32.         if (Caculate24(a, b, c, d, C[0], C[1], C[2]) == 24){  
  33.             //do right;  
  34.               
  35.             return true;  
  36.         }  
  37.     } while (next_permutation(C, C + 12));  
  38.       
  39.     return false;  
  40. }  
  41.   
  42.   
  43. int main()  
  44. {  
  45.     string str[4];  
  46.     cin >> str[0] >> str[1] >> str[2] >> str[3];  
  47.     int i, j;  
  48.     bool legal;  
  49.     for (i = 0; i < 4; i++){  
  50.         legal = false;  
  51.         for (j = 0; j < 13; j++){  
  52.             if (str[i].compare(poker[j].c_str()) == 0)  
  53.                 legal = true;  
  54.         }  
  55.         if (legal == false){  
  56.             cout << "ERROR" << endl;  
  57.             return 0;  
  58.         }  
  59.     }  
  60.       
  61.     int a, b, c, d;  
  62.     string *p;  
  63.     p = find(poker, poker + 13, str[0]);  
  64.     a = p - poker + 1;  
  65.     p = find(poker, poker + 13, str[1]);  
  66.     b = p - poker + 1;  
  67.     p = find(poker, poker + 13, str[2]);  
  68.     c = p - poker + 1;  
  69.     p = find(poker, poker + 13, str[3]);  
  70.     d = p - poker + 1;  
  71.       
  72.     //现在a, b, c, d分别代表每一张牌的数值  
  73.     int num[4];  
  74.     num[0] = a, num[1] = b, num[2] = c, num[3] = d;  
  75.       
  76.     do {  
  77.         if (Count24(num[0], num[1], num[2], num[3])){  
  78.             cout << poker[num[0] - 1] << C[0] << poker[num[1] - 1] << C[1] << poker[num[2] - 1] << C[2] << poker[num[3] - 1] << endl;  
  79.             return 0;  
  80.         }  
  81.     } while (next_permutation(num, num+4));  
  82.     cout << "NONE" << endl;  
  83.     return 0;  
  84. }  

华为oj中级 24点运算

描述 计算24点是一种扑克牌益智游戏,随机抽出4张扑克牌,通过加(+),减(-),乘(*), 除(/)四种运算法则计算得到整数24,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写joker表...

24点算法及算术运算算法

  • 2008年03月06日 19:37
  • 5KB
  • 下载

24点游戏改进版---支持出题,解题运算

// test11.cpp : Defines the entry point for the console application. // #include "stdafx.h" #incl...

[华为OJ--C++]107-24点运算

题目描述: 计算24点是一种扑克牌益智游戏,随机抽出4张扑克牌,通过加(+),减(-),乘(*), 除(/)四种运算法则计算得到整数24,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写jok...

华为OJ题目:24点运算

描述: 计算24点是一种扑克牌益智游戏,随机抽出4张扑克牌,通过加(+),减(-),乘(*), 除(/)四种运算法则计算得到整数24,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写joke...
  • lylyyg
  • lylyyg
  • 2015年08月14日 20:53
  • 2197

PAT 2-08 用扑克牌计算24点(C语言实现)

原题描述题目描述: 一副扑克牌的每张牌表示一个数(J、Q、K分别表示11、12、13,两个司令都表示6)。任取4张牌,即得到4个1~13的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之...

算12/24点算法 布线问题/迷宫最短路径

算法分析的课程设计,做了一个布线went

编程之美--1.16 24点游戏

解答 1 这道题目jie
  • seawade
  • seawade
  • 2014年08月15日 14:46
  • 343
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:24点运算
举报原因:
原因补充:

(最多只允许输入30个字)