最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

MFC 24点程序代码及注释

来源:动视网 责编:小OO 时间:2025-10-05 04:38:23
文档

MFC 24点程序代码及注释

代码阅读及注释:24点游戏*/#include"conio.h"#include"stdlib.h"#include"time.h"#include"math.h"#include"string.h"/*从一副扑克牌中,任取4张。2-10按其点数计算(为了表示方便10用T表示),J,Q,K,A统一按1计算要求通过加减乘除四则运算得到数字24。本程序可以随机抽取纸牌,并用试探法求解。*/voidGivePuzzle(char*buf){charcard[]={'A','2','3','4','5
推荐度:
导读代码阅读及注释:24点游戏*/#include"conio.h"#include"stdlib.h"#include"time.h"#include"math.h"#include"string.h"/*从一副扑克牌中,任取4张。2-10按其点数计算(为了表示方便10用T表示),J,Q,K,A统一按1计算要求通过加减乘除四则运算得到数字24。本程序可以随机抽取纸牌,并用试探法求解。*/voidGivePuzzle(char*buf){charcard[]={'A','2','3','4','5


代码阅读及注释:

24点游戏

*/

#include "conio.h"

#include "stdlib.h"

#include "time.h"

#include "math.h"

#include "string.h"

/*

从一副扑克牌中,任取4张。

2-10 按其点数计算(为了表示方便10用T表示),J,Q,K,A 统一按 1 计算

要求通过加减乘除四则运算得到数字 24。

本程序可以随机抽取纸牌,并用试探法求解。

*/

void GivePuzzle(char* buf)

{

char card[] = {'A','2','3','4','5','6','7','8','9','T','J','Q','K'};

for(int i=0; i<4; i++){

buf[i] = card[rand() % 13];

}

}

void shuffle(char * buf)

{

for(int i=0; i<5; i++){

int k = rand() % 4;

char t = buf[k];

buf[k] = buf[0];

buf[0] = t;

}

}

int GetCardValue(int c)

{

if(c=='T') return 10;

if(c>='0' && c<='9') return c - '0';

return 1;

}

char GetOper(int n)

{

switch(n)

{

case 0:

return '+';

case 1:

return '-';

case 2:

return '*';

case 3:

return '/';

}

return ' ';

}

double MyCalcu(double op1, double op2, int oper)

{

switch(oper)

{

case 0:

return op1 + op2;

case 1:

return op1 - op2;

case 2:

return op1 * op2;

case 3:

if(fabs(op2)>0.0001)

return op1 / op2;

else

return 100000;

}

return 0;

}

void MakeAnswer(char* answer, int type, char* question, int* oper)

{

char p[4][3];

for(int i=0; i<4; i++)

{

if( question[i] == 'T' )

strcpy(p[i], "10");

else

sprintf(p[i], "%c

[2],p[3],oper[2]),oper[1]); // (A*B)*(C*D)

break;

case 3:

sum=MyCalcu(MyCalcu(MyCalcu(p[0],p[1],oper[0]),p[2],oper[1]),p[3],oper[2]); //((A*B)*C)*D

break;

case 4:

sum=MyCalcu(MyCalcu(p[0],MyCalcu(p[1],p[2],oper[1]),oper[0]),p[3],oper[2]); //(A*(B*C))*D

break;

}

if(sum==24) return true;

}

return false;

}

/*

采用随机试探法:就是通过随机数字产生 加减乘除的 组合,通过大量的测试来命中的解法

1. 需要考虑用括号控制计算次序的问题 比如:( 10 - 4 ) * ( 3 + A ), 实际上计算次序的数目是有限的:

A*(B*(c*D))

A*((B*C)*D)

(A*B)*(C*D)

((A*B)*C)*D

(A*(B*C))*D

2. 需要考虑计算结果为分数的情况:( 3 + (3 / 7) ) * 7

3. 题目中牌的位置可以任意交换

*/

bool TryResolve(char* question, char* answer)

{

int oper[3]; // 存储运算符,0:加法 1:减法 2:乘法 3:除法

for(int i=0; i<1000 * 1000; i++)

{

// 打乱纸牌顺序

shuffle(question);

// 随机产生运算符

for(int j=0; j<3; j++)

oper[j] = rand() % 4;

if( TestResolve(question, oper, answer) ) return true;

}

return false;

}

int main(int argc, char* argv[])

{

// 初始化随机种子

srand( (unsigned)time( NULL ) );

char buf1[4]; // 题目

char buf2[30]; // 解答

printf("***************************\

");

printf("计算24\

");

printf("A J Q K 均按1计算,其它按牌点计算\

");

printf("目标是:通过四则运算组合出结果:24\

");

printf("***************************\

\

");

for(;;)

{

GivePuzzle(buf1); // 出题

printf("题目:");

for(int j=0; j<4; j++){

if( buf1[j] == 'T' )

printf("10 ");

else

printf("%c

文档

MFC 24点程序代码及注释

代码阅读及注释:24点游戏*/#include"conio.h"#include"stdlib.h"#include"time.h"#include"math.h"#include"string.h"/*从一副扑克牌中,任取4张。2-10按其点数计算(为了表示方便10用T表示),J,Q,K,A统一按1计算要求通过加减乘除四则运算得到数字24。本程序可以随机抽取纸牌,并用试探法求解。*/voidGivePuzzle(char*buf){charcard[]={'A','2','3','4','5
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top