一个24点的小游戏~

闲的无聊写的程序~没有做过什么优化,而且加法乘法的交换性也没有考虑进去

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define PLU  0
#define MIN  1
#define MUL  2
#define DIV  3
#define RES  24
#define ERR  -30000  //不可能达到的值,在13^4之外,28651
#define SUCC  1

const char opChar[4]={'+','-','*','/'};

const int numA[24][4]={
0,1,2,3,
0,1,3,2,
0,2,1,3,
0,2,3,1,
0,3,1,2,
0,3,2,1,
1,0,2,3,
1,0,3,2,
1,2,0,3,
1,2,3,0,
1,3,0,2,
1,3,2,0,
2,0,1,3,
2,0,3,1,
2,1,0,3,
2,1,3,0,
2,3,0,1,
2,3,1,0,
3,0,1,2,
3,0,2,1,
3,1,0,2,
3,1,2,0,
3,2,0,1,
3,2,1,0
};



int calT(int t1,int t2,int op){
     if ((t1==ERR)||(t2==ERR)) return ERR;
   switch(op){
       case PLU:return t1+t2;
       case MIN:return t1-t2;
       case MUL:return t1*t2;
       case DIV:
           if ((t2!=0)&&((t1/t2)*t2==t1))
           return t1/t2;
           else return ERR;
       default:
         return ERR;       
   }
}

int calTurn(int *num,int* oper){
   int result;
   result=calT(calT(calT(num[0],num[1],oper[0]),num[2],oper[1]),num[3],oper[2]);
   if (result==RES) {printf("Anser is ((%d%c%d)%c%d)%c%d=24\n",num[0],opChar[oper[0]],num[1],opChar[oper[1]],num[2],opChar[oper[2]],num[3]);return SUCC;}
   result=calT(calT(num[0],calT(num[1],num[2],oper[0]),oper[1]),num[3],oper[2]);
   if (result==RES) {printf("Anser is (%d%c(%d%c%d))%c%d=24\n",num[0],opChar[oper[1]],num[1],opChar[oper[0]],num[2],opChar[oper[2]],num[3]);return SUCC;}
   result=calT(calT(num[0],num[1],oper[0]),calT(num[2],num[3],oper[1]),oper[2]);
   if (result==RES) {printf("Anser is (%d%c%d)%c(%d%c%d)=24\n",num[0],opChar[oper[0]],num[1],opChar[oper[2]],num[2],opChar[oper[1]],num[3]);return SUCC;}
   result=calT(num[0],calT(calT(num[1],num[2],oper[0]),num[3],oper[1]),oper[2]);
   if (result==RES) {printf("Anser is %d%c((%d%c%d)%c%d)=24\n",num[0],opChar[oper[2]],num[1],opChar[oper[0]],num[2],opChar[oper[1]],num[3]);return SUCC;}
   result=calT(num[0],calT(num[1],calT(num[2],num[3],oper[0]),oper[1]),oper[2]);
   if (result==RES) {printf("Anser is %d%c(%d%c(%d%c%d))=24\n",num[0],opChar[oper[2]],num[1],opChar[oper[1]],num[2],opChar[oper[0]],num[3]);return SUCC;}
   return 0;                   
}

int solution(int *numBufTemp){
int q=0;
int numBuf[4];
int opBuf[3];

q=0;
for (q=0;q<=23;q++){
       numBuf[0]=numBufTemp[numA[q][0]];
       numBuf[1]=numBufTemp[numA[q][1]];
       numBuf[2]=numBufTemp[numA[q][2]];
       numBuf[3]=numBufTemp[numA[q][3]];
       for (opBuf[0]=0;opBuf[0]<=3;opBuf[0]++){
         for (opBuf[1]=0;opBuf[1]<=3;opBuf[1]++){
             for (opBuf[2]=0;opBuf[2]<=3;opBuf[2]++){
             if (calTurn(numBuf,opBuf)==SUCC) return 1;
           }
         }
     }
}
printf("No answer!\n");
return 0;
}

int main(int argc,char *argv[]){
    int i;
    time_t t;
    int num[4];
  char ch;
 
  srand((unsigned) time(&t));
 // randomize();
 
while(ch!='e'){  
  for (i=0;i<=3;i++){
      num[i]=rand()%13+1;
    printf("%d ",num[i]);
   
  }
 
  printf("\n");
  ch=getch();
 
  solution(num);
  ch=getch();
}  
 
}
转载请注明出处,禁止用于任何商业用途,否则后果自负!

【博士论文复现】【阻抗建模、验证扫频法】光伏并网逆变器扫频与稳定性分析(包含锁相环电流环)(Simulink仿真实现)内容概要:本文档围绕“博士论文复现”主题,重介绍了光伏并网逆变器的阻抗建模与扫频法稳定性分析,涵盖锁相环和电流环的Simulink仿真实现。文档旨在通过完整的仿真资源和代码帮助科研人员复现相关技术细节,提升对新能源并网系统动态特性和稳定机制的理解。此外,文档还提供了大量其他科研方向的复现资源,包括微电网优化、机器学习、路径规划、信号处理、电力系统分析等,配套MATLAB/Simulink代码与模型,服务于多领域科研需求。; 适合人群:具备一定电力电子、自动控制或新能源背景的研究生、博士生及科研人员,熟悉MATLAB/Simulink环境,有志于复现高水平论文成果并开展创新研究。; 使用场景及目标:①复现光伏并网逆变器的阻抗建模与扫频分析过程,掌握其稳定性判据与仿真方法;②借鉴提供的丰富案例资源,支撑博士论文或期刊论文的仿真实验部分;③结合团队提供的算法与模型,快速搭建实验平台,提升科研效率。; 阅读建议:建议按文档目录顺序浏览,优先下载并运行配套仿真文件,结合理论学习与代码调试加深理解;重关注锁相环与电流环的建模细节,同时可拓展学习其他复现案例以拓宽研究视野。
内容概要:本文系统解析了嵌入式通信协议栈系列项目的实践路径,围绕通信原理与工程实现,阐述在资源受限的嵌入式环境中构建稳定、可扩展通信能力的方法。文章从通信基础模型出发,强调分层设计思想,涵盖物理层到应用层的职责划分,并依次讲解通信驱动、数据收发机制、帧格式解析、状态机控制、错误处理等核心技术环节。项目实践注重底层可靠性建设,如中断响应、缓冲区管理与数据校验,同时关注上层应用对接,确保协议栈支持设备配置、状态上报等实际业务。文中还突出性能优化与资源管理的重要性,指导开发者在内存与处理效率间取得平衡,并通过系统化测试手段(如异常模拟、压力测试)验证协议栈的健壮性。; 适合人群:具备嵌入式系统基础知识,有一定C语言和硬件接口开发经验,从事或希望深入物联网、工业控制等领域1-3年工作经验的工程师。; 使用场景及目标:①掌握嵌入式环境下通信协议栈的分层架构设计与实现方法;②理解状态机、数据封装、异常处理等关键技术在真实项目中的应用;③提升在资源受限条件下优化通信性能与稳定性的工程能力; 阅读建议:建议结合实际嵌入式平台动手实践,边学边调,重关注各层接口定义与模块解耦设计,配合调试工具深入分析通信流程与异常行为,以全面提升系统级开发素养。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值