24点 c语言

//判断4个数能否组成24点 
#include <stdio.h>
#include <math.h>


int n; 
int t; 
double a[20];
int cnt;
double stack[100];
int stack_top;

void play(int num){
    if(num>n){
        if(stack_top==1){
            if(fabs(stack[0]-24.0)<1e-7){
                cnt=1;
                return ;
            }
        }
        else{
            double t2=stack[--stack_top];
            double t1=stack[--stack_top];
            
            stack[stack_top++]=t1+t2;
            play(num);
            --stack_top;
            
            stack[stack_top++]=t1-t2;
            play(num);
            --stack_top;
            
            stack[stack_top++]=t1*t2;
            play(num);
            --stack_top;
            
            stack[stack_top++]=t1/t2;
            play(num);
            --stack_top;
            
            stack[stack_top++]=t1;
            stack[stack_top++]=t2;
        }
        return ;
    }
    stack[stack_top++]=a[num];
    play(num+1);
    --stack_top;
    
    if(stack_top>=2){
        double t2=stack[--stack_top];
        double t1=stack[--stack_top];
        
        stack[stack_top++]=t1+t2;
        play(num);
        --stack_top;
        
        stack[stack_top++]=t1-t2;
        play(num);
        --stack_top;
        
        stack[stack_top++]=t1*t2;
        play(num);
        --stack_top;
        
        stack[stack_top++]=t1/t2;
        play(num);
        --stack_top;
        
        stack[stack_top++]=t1;
        stack[stack_top++]=t2;
    }
    
}

int main(){
	
    scanf("%d %d",&n,&t);
    while(t--){
        for(int i=1;i<=n;++i) scanf("%lf",a+i);
        cnt=0;
        stack_top=0;
        play(1);
        if(cnt){
		 puts("可以组成");
	    }
        else  {
		 puts("不可以组成");
	    }
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/Gloid/p/9379150.html