zoukankan      html  css  js  c++  java
  • 编程输出完美之星编程大赛 复赛第二场 24点

    文章结束给大家来个程序员笑话:[M]

        标题描述:

        描述: 两人用一副扑克(王牌除去)玩24点,规则是这样的:两人各出2张牌,谁先算出来谁赢,赢家收回已算过的4张牌,最后看谁手里的牌多。四张牌分别用4个扑克牌面字符表示。A,1,2,3,4,5,6,7,8,9,10,J,Q,K 分别代表数字1,2,3,4,5,6,7,8,9,10,11,12,13。其中每张牌只能应用一次;任意应用 +, –, *, /, ( ) ,构造出一个表达式,使得最终结果为24。
    Input:   输入的第一行正整数N代表须要求解测试集合数目。接下来的N行代表每个测试 集,分别用四个字符代表四张牌面。
    Output: 对于每个测试集,如果存在能算出24点的计划,即输出表达式。如果存在多个,只须要输出一个即可。而对于不能算出24点的测试集,输出字符串“NULL”。


    Sample Input:
    3
    A 4 5 6
    A Q 2 A
    7 7 7 7


    Sample Output:
    6/((5/4)-A)
    (A/A)*2*Q
    NULL

        思绪:将4元运算,一直的转换为2元运算,放在数组的首位,当递归深度为3的时候判断。网上24点游戏的算法很多,鉴戒了一下前csdn版主的思绪写的代码。

        每日一道理
    爱心是一片照射在冬日的阳光,使贫病交迫的人感到人间的温暖;爱心是一泓出现在沙漠里的泉水,使濒临绝境的人重新看到生活的希望;爱心是一首飘荡在夜空的歌谣,使孤苦无依的人获得心灵的慰藉。
    #include <iostream>
    #include <string>
    #include <cmath>
    #include <sstream>
    using namespace std;
    const double wucha=1E-6;  //浮点除法有精度损失 
    double num[4];
    string expression[4];    //表达式 
    bool flag;
    void game24(int n){
    	
    	
    	if(n==1){
    		if(fabs(num[0]-24)<=wucha){
    			flag=1; 
    			for(int i=1;i!=expression[0].size()-1;i++)//输出的时候最外层的一个括号去掉 
    				cout<<expression[0][i];
    			cout<<endl;	
    			return ;
    		}
    	}
    	if(flag)return ;    //找到满足的一组即可 
    	for(int i=0;i<n;i++)
    	{
    		for(int j=i+1;j<n;j++)
    		{
    			double a,b;
    			string exa,exb;
    			a=num[i];
    			b=num[j];
    			num[j]=num[n-1];    //用最后一个元素覆盖,注意这里的n在每次递归中是要递减的 
    			exa = expression[i];
    			exb = expression[j];
    			expression[j] = expression[n-1];
    			expression[i]= '('+ exa + '+' + exb + ')';
    			num[i] = a + b;
    			game24(n-1);
    			expression[i]='('+ exa+ '-' + exb + ')';
    			num[i] = a - b;
    			game24(n-1);
    			expression[i] = '('+exb + '-' + exa + ')';
    			num[i] = b -a;
    			game24(n-1);
    			expression[i]= '('+ exa +'*'+ exb+ ')';
    			num[i]=a*b;
    			game24(n-1);
    			if (b != 0)
    			{
    				expression[i] ='('+exa+'/' + exb + ')';
    				num[i] = a / b;
    				game24(n-1);
    			}
    			if (a != 0)
    			{
    				expression[i]='('+exb + '/'+ exa + ')';
    				num[i] = b / a;
    				game24(n-1);
    			}
    			num[i]=a;
    			num[j]=b;
    			expression[i] = exa;
    			expression[j] = exb;  //递归恢复 
    		}
    	}
    }
    int main()
    {
    	int n;
    	cin>>n;
    	
    	while(n--)
    	{
    		cin>>expression[0]>>expression[1]>>expression[2]>>expression[3];
    		
    		for(int i=0;i<4;i++){
    			if(expression[i]=="A")num[i]=1;
    			else if(expression[i]=="J")num[i]=11;
    			else if(expression[i]=="Q")num[i]=12;
    			else if(expression[i]=="K")num[i]=13;
    			else if(expression[i]=="10")num[i]=10;
    			else {
    				char tmp=expression[i][0];
    				num[i]=tmp-'0';
    			}
    		
    		}
    	
    		flag=0;
    		game24(4);
    		if(!flag)cout<<"NULL"<<endl;
    		
    	}
    }

    文章结束给大家分享下程序员的一些笑话语录: 面试官:熟悉哪种语言
    应聘者:JAVA
    面试官:知道什么叫类么
    应聘者:我这人实在,工作努力,不知道什么叫累
    面试官:知道什么是包?
    应聘者:我这人实在 平常不带包 也不用公司准备了
    面试官:知道什么是接口吗?
    应聘者:我这个人工作认真。从来不找借口偷懒
    面试官:知道什么是继承么
    应聘者:我是孤儿没什么可以继承的
    面试官:知道什么叫对象么?
    应聘者:知道,不过我工作努力,上进心强,暂时还没有打算找对象。
    面试官:知道多态么?
    应聘者:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系??

    --------------------------------- 原创文章 By
    编程和输出
    ---------------------------------

  • 相关阅读:
    C6678图像处理板卡学习资料第426篇:基于XC7Z100+TMS320C6678的图像处理板卡
    无线通信板卡学习资料第427篇:基于3U VPX XC7Z035+AD9361的无线通信板卡
    硬件加速卡学习资料第1篇:基于Xilinx XCKU115的半高PCIe x8 硬件加速卡 FPGA硬件加速
    硬件加速卡学习资料第1篇:基于Xilinx XCKU115的半高PCIe x8 硬件加速卡 FPGA硬件加速
    PCIe 加速计算卡学习资料第420篇:基于ZU19EG的4路100G光纤的PCIe 加速计算卡
    GPU计算主板学习资料第735篇:基于3U VPX的AGX Xavier GPU计算主板 信号计算主板 视频处理 相机信号
    [个人翻译]GitHub指导文件(GitHub Guides[Hello World])
    关于“如何只用2GB内存从20亿,40亿,80亿个整数中找到出现次数最多的数?”的一种思路
    [RabbitMQ]Windows环境下rabbitmqclt(Command Line Tools)出现Erlang distribution failed错误的解决方法
    Visual Studio无法推送提交到Github的解决方法
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3113002.html
Copyright © 2011-2022 走看看